<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.openoffice.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Plipli</id>
	<title>Apache OpenOffice Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.openoffice.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Plipli"/>
	<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/wiki/Special:Contributions/Plipli"/>
	<updated>2026-05-16T19:30:48Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.14</generator>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=User:Ericb&amp;diff=32082</id>
		<title>User:Ericb</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=User:Ericb&amp;diff=32082"/>
		<updated>2007-05-14T08:23:58Z</updated>

		<summary type="html">&lt;p&gt;Plipli: /* Our Objectives at the WWDC 2007 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Public Documentation License Notice==&lt;br /&gt;
&lt;br /&gt;
The contents of this Documentation (excepted Native Port Roadmap),are subject to the Public Documentation License Version 1.0 (the &amp;quot;License&amp;quot;); you may only use this Documentation if you comply with the terms of this License. A copy of the License is available at http://www.openoffice.org/licenses/PDL.html.&lt;br /&gt;
The Original Documentation is &amp;quot;Mac OS X native port&amp;quot;. The Initial Writer of the Original Documentation is (JCA) Eric Bachard (C) 2005-2006. All Rights Reserved. (Initial Writer contact(s): ericb@openoffice.org.)&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Mac OS X Native port&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;messagebox cleanup metadata&amp;quot; style=&amp;quot;border:1px solid blue;background-color:#B3FFF5;padding:7px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;The first Mac OS X native port objective is make OpenOffice.org run without X11 use, to make it a real Mac application.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;The second one is respect Aqua Human interface Guidelines&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; This is a long term work, and every help and/or contributions, like donations** are welcome.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 **see http://contributing.openoffice.org/index.html&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Native Port Roadmap&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;2006&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
* June 2006: work in progress &lt;br /&gt;
&lt;br /&gt;
- Basis: frame, instances, threads, drawing, painting, resizing (Stephan Schaefer, Tino Rachui)&lt;br /&gt;
&lt;br /&gt;
 Done: &lt;br /&gt;
 implement threads&lt;br /&gt;
 create, manage instance&lt;br /&gt;
 create, manage windows (including parents)&lt;br /&gt;
 create, manage events&lt;br /&gt;
 create manage drawing, resizing&lt;br /&gt;
 create, add menus (Pavel Janik)&lt;br /&gt;
 toggle window fullscreen (Pierre de Filippis)&lt;br /&gt;
 make font server work (Stephan Schaefer)&lt;br /&gt;
&lt;br /&gt;
* Current status font support (Stephan Schaefer, 2006/07/28): the following features are basically working now&lt;br /&gt;
** font selection&lt;br /&gt;
** font size&lt;br /&gt;
** simple font attributes (bold, italic)&lt;br /&gt;
&lt;br /&gt;
 Next step: document first part, and propose design&lt;br /&gt;
&lt;br /&gt;
- native filepicker (Pavel Janik, Florian Heckl)&lt;br /&gt;
&lt;br /&gt;
- native printing implementation (Oliver?)&lt;br /&gt;
&lt;br /&gt;
- native font implementation (Eric Bachard)&lt;br /&gt;
&lt;br /&gt;
* September 2006: &lt;br /&gt;
&lt;br /&gt;
- first proofs of concept: fonts, filepicker .. (more?)&lt;br /&gt;
- show the results (OOoCon 2006?)&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;2007&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
* January 2007: first alpha implementation&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Strategy for native port&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Possible Actions&amp;#039;&amp;#039;&amp;#039;: &lt;br /&gt;
&lt;br /&gt;
Identify us:&lt;br /&gt;
&lt;br /&gt;
#Complete the arrays below&lt;br /&gt;
#Update photos on frapr.com?&lt;br /&gt;
&lt;br /&gt;
Share the work:&lt;br /&gt;
&lt;br /&gt;
#Divide the work between little Teams&lt;br /&gt;
#Update Todo list regularly -&amp;gt; needs some love these days ... [http://wiki.services.openoffice.org/wiki/Mac_OS_X_Porting_-_Work_Areas/Todo%27s]&lt;br /&gt;
&lt;br /&gt;
Help:&lt;br /&gt;
&lt;br /&gt;
#Teach tools between us&lt;br /&gt;
#Do a debug party on IRC&lt;br /&gt;
#write documentation&lt;br /&gt;
&lt;br /&gt;
Meet us:&lt;br /&gt;
&lt;br /&gt;
#IRC&lt;br /&gt;
#Mac Meeting (like nov2005 in Hamburg?)&lt;br /&gt;
&lt;br /&gt;
Inform:&lt;br /&gt;
&lt;br /&gt;
#Update website regularly&lt;br /&gt;
#Blogs&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;WHO&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
Mac Team:&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;vertical-align:top; text-align:left; background-color:#efefef;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#d6d6d6;font-weight:bold;&amp;quot; &lt;br /&gt;
|Developer \ skills || build || write code || code review || debug/trace (higher is better) || contribute to documentation ||&lt;br /&gt;
|-&lt;br /&gt;
|ericb|| x || x || || 1 || x ||&lt;br /&gt;
|-&lt;br /&gt;
|pjanik|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|ssa|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|maho|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|tinor|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|schmidtm|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|ebischoff|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|obr|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|cl|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|aliscafo|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|fheckl|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Fridrich|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|plipli|| || x || || || x ||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Other resources&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
fonts: ?&lt;br /&gt;
&lt;br /&gt;
events: ?&lt;br /&gt;
&lt;br /&gt;
QA: James McKenzie leads QA for the Mac OS X port of OpenOffice.org and is looking for volunteers to spread this effort over several people and needs people from all over the world to test various languages.&lt;br /&gt;
&lt;br /&gt;
graphical: ?&lt;br /&gt;
&lt;br /&gt;
Communication: ?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;WHAT&amp;#039;&amp;#039;&amp;#039;: Status of most important tasks&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;vertical-align:top; text-align:left; background-color:#efefef;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#d6d6d6;font-weight:bold;&amp;quot; &lt;br /&gt;
| Task || Names|| Urgency (1=higher)|| Work in Progress || Done || Code review || Debug || Integration || &lt;br /&gt;
|-&lt;br /&gt;
|Get rid of X11||done || 1 || x || x || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Bundle|| || 1 || x || || || || | ||&lt;br /&gt;
|-&lt;br /&gt;
|Drawing|| || 1 || x || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Fonts||plipli || 1 || x || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Events management|| || 2 || x || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Controls (see list) ||ericb, aliscafo || 2 || x || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Native FilePicker||Florian Heckl, Pavel Janik || 3 || x || x || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Native Printing||Yvan Barthelemy || 3 || x || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Native SpellChecker|| || 4 || || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Player||Mox Soini || 4 || x || || || || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Other tasks:&lt;br /&gt;
&lt;br /&gt;
Help for writing bug lists, status of bugs ..etc&lt;br /&gt;
&lt;br /&gt;
Write howto use gdb, leaks, other tools&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;WHEN&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
From Christian Lippka (last meeting, 25th of august 2006): &lt;br /&gt;
 Aug 26 00:21:38 ChristianL&lt;br /&gt;
 from my point of view what is missing for point 1:&lt;br /&gt;
 text layout, complete font support, keyboard support,&lt;br /&gt;
 fixing repaint issues, having aqua install and run out of the box&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;September 2006&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Present the current state of the project at the 2006 OpenOffice conference in Lyon and Paris&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Late 2006&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
fix OpenOffice.org launch&lt;br /&gt;
fix drawing (repainting)&lt;br /&gt;
Implement missing methods and fix most important bugs (mainly the one leading to crash) in:&lt;br /&gt;
ATS&lt;br /&gt;
Salgraphics&lt;br /&gt;
Salinstance&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;January or February 2007&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
make Java work (works partially)&lt;br /&gt;
make intensive debug&lt;br /&gt;
present something working as alpha&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;June 2007	&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Implementation of:&lt;br /&gt;
native filepicker&lt;br /&gt;
native printing&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Become a Domain Developer for Mac OS X port&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
People regularly contributing to Mac OS x port with regular and quality patches are, after proposal, invited to become a [[DomainDeveloper]].&lt;br /&gt;
&lt;br /&gt;
The purpose of this document is to clearly define all the steps to become a [[DomainDeveloper]]. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Preliminary :  step 1 in  [[Commit_Rights]] must be completed and checked, and you must be in the list of [[http://www.openoffice.org/FAQs/faq-licensing.html#jca1 JCA Licensed people]]&lt;br /&gt;
&lt;br /&gt;
=== Steps for ssh2 key to be uploaded ===&lt;br /&gt;
&lt;br /&gt;
==== Create the key ====&lt;br /&gt;
&lt;br /&gt;
Everything is described here : [[http://www.openoffice.org/scdocs/ddSSHGuide.html SSH Guide]] &lt;br /&gt;
&lt;br /&gt;
==== Upload the key ====&lt;br /&gt;
&lt;br /&gt;
You must create an issue, like described below  :&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Assign it to &amp;quot;ssh2key&amp;quot; in the &amp;quot;www&amp;quot; component&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Sub Component : openoffice.org cvs&lt;br /&gt;
&lt;br /&gt;
Title : CVS Commit access request&lt;br /&gt;
&lt;br /&gt;
Add louis ( Louis Suarez Potts) or st ( Stefan Taxhet ) on CC&lt;br /&gt;
&lt;br /&gt;
Upload your ssh2 public key respecting the process ( Attach a DSA key, not an RSA )&lt;br /&gt;
&lt;br /&gt;
A project lead will confirm your request &lt;br /&gt;
&lt;br /&gt;
Then the support will upload your key&lt;br /&gt;
&lt;br /&gt;
Once done the issue is set to Fixed , and the next step has to be verified before &amp;#039;&amp;#039;&amp;#039;you&amp;#039;&amp;#039;&amp;#039; close it.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;EXAMPLE&amp;#039;&amp;#039;&amp;#039; : [[http://www.openoffice.org/issues/show_bug.cgi?id=75291 Upload SSH2 Key for Etsushi Kato]]&lt;br /&gt;
&lt;br /&gt;
==== Verify it works ====&lt;br /&gt;
&lt;br /&gt;
You now can try to connect via tunnel, and follow instructions given [[http://www.openoffice.org/scdocs/ddSSHGuide.html SSH Guide]] &lt;br /&gt;
&lt;br /&gt;
If something goes wrong, ask for help to support, with a maximum of details, to solve the problem.&lt;br /&gt;
&lt;br /&gt;
Once it works, the issue can be closed, and you can e.g. test downloading a module from tunnel repository :&lt;br /&gt;
&lt;br /&gt;
First create a tunnel with the command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh -2 -x -L 2401:localhost:2401 tunnel@openoffice.org&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then in a new window:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export CVSROOT=&amp;quot;:pserver:your_login@localhost:/cvs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
cvs login ( enter )&lt;br /&gt;
&lt;br /&gt;
(your password )&lt;br /&gt;
&lt;br /&gt;
mkdir TEST&lt;br /&gt;
&lt;br /&gt;
cd TEST&lt;br /&gt;
&lt;br /&gt;
cvs -z4 co -r SRC680_m205 vcl &lt;br /&gt;
&lt;br /&gt;
cd vcl &lt;br /&gt;
&lt;br /&gt;
cat CVS/Root  -&amp;gt; should indicate : your local repository&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ask for CVS access for all modules required ===&lt;br /&gt;
&lt;br /&gt;
Two steps : create an issue is mandatory because the concerned project is tools, and because people can have only ssh2 key without being [[DomainDeveloper]].&lt;br /&gt;
&lt;br /&gt;
==== Create an issue ====&lt;br /&gt;
&lt;br /&gt;
You must create an issue, described below  :&lt;br /&gt;
&lt;br /&gt;
Component : tools&lt;br /&gt;
&lt;br /&gt;
Sub Component : www&lt;br /&gt;
&lt;br /&gt;
Title : CVS access to all modules required&lt;br /&gt;
&lt;br /&gt;
Assigned to mh  +  CC for ericb and/or pjanik&lt;br /&gt;
&lt;br /&gt;
Present yourself quickly, and ask the access&lt;br /&gt;
&lt;br /&gt;
A project lead will confirm&lt;br /&gt;
&lt;br /&gt;
An admin will confirm this is ok, and set the issue to Fixed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;EXAMPLE&amp;#039;&amp;#039;&amp;#039; : [[http://www.openoffice.org/issues/show_bug.cgi?id=75494 CVS Access all modules for Etsushi Kato]]&lt;br /&gt;
&lt;br /&gt;
==== Verify ====&lt;br /&gt;
&lt;br /&gt;
Create the tunnel :&lt;br /&gt;
&lt;br /&gt;
open a terminal and type :&lt;br /&gt;
&lt;br /&gt;
ssh -2 -x -L 2401:localhost:2401 tunnel@openoffice.org&lt;br /&gt;
&lt;br /&gt;
once logged in, open a new terminal, and do ( for example ):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd $OOO_SRC_ROOT/&lt;br /&gt;
&lt;br /&gt;
source MacOSXPPCEnv.Set.sh  { source MacOSXX86Env.Set.sh for Mac Intel }&lt;br /&gt;
&lt;br /&gt;
cd vcl  ( for example )&lt;br /&gt;
&lt;br /&gt;
IMPORTANT : be sure vcl has been checked from tunnel, not from anoncvs ( cat CVS/Root will give you the answer )&lt;br /&gt;
&lt;br /&gt;
export CWS_WORK_STAMP=aquavcl01   # Only needed for working with [[EIS]], can change for a different CWS ;) &lt;br /&gt;
&lt;br /&gt;
cd aqua/source/gdi&lt;br /&gt;
&lt;br /&gt;
add your changes to your_file.cxx, then commit :&lt;br /&gt;
&lt;br /&gt;
cvs commit -m &amp;quot;#i75689# bla bla ... the reason of the modification(s)&amp;quot;  your_file.cxx  # The #i75689# is an issue number in the tracker&lt;br /&gt;
&lt;br /&gt;
cvs update&lt;br /&gt;
&lt;br /&gt;
If nothing is wrong, cvs update should not return M for your_file.cxx, means the commit is successfull.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
In case of problem, use the issue until it is fixed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;#039;&amp;#039;&amp;#039;Welcome aboard :)&amp;#039;&amp;#039;&amp;#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Mac OS X porter Team at WWDC 2007&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
=== What is WWDC 2007 ? ===&lt;br /&gt;
&lt;br /&gt;
See [http://developer.apple.com/wwdc/ Apple WWDC 2007]&lt;br /&gt;
&lt;br /&gt;
====Labs Agenda====&lt;br /&gt;
&lt;br /&gt;
It is extremely important to organize us for Labs.&lt;br /&gt;
&lt;br /&gt;
The rule is extremely simple : bring your laptop, your code, and ask :)&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;10&amp;quot;&lt;br /&gt;
| Days&lt;br /&gt;
|monday&amp;lt;br&amp;gt;June 11&lt;br /&gt;
|tuesday&amp;lt;br&amp;gt;June 12&lt;br /&gt;
|wednesday&amp;lt;br&amp;gt;June 13&lt;br /&gt;
|thursday&amp;lt;br&amp;gt;June 14&lt;br /&gt;
|friday &amp;lt;br&amp;gt;June 15&lt;br /&gt;
|-&lt;br /&gt;
|Labs&lt;br /&gt;
|&amp;lt;br&amp;gt;Afternoon&lt;br /&gt;
|Morning&amp;lt;br&amp;gt;Afternoon&lt;br /&gt;
|Morning&amp;lt;br&amp;gt;Afternoon&lt;br /&gt;
|Morning&amp;lt;br&amp;gt;Afternoon&lt;br /&gt;
|Morning&amp;lt;br&amp;gt;Afternoon&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====&amp;#039;&amp;#039;&amp;#039;Interesting Labs&amp;#039;&amp;#039;&amp;#039;====&lt;br /&gt;
&lt;br /&gt;
The complete list : [http://developer.apple.com/wwdc/tracks/macosx.html Mac OS X Essentials]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Core Text Lab &lt;br /&gt;
Receive one-on-one technical assistance and troubleshooting advice from the Core Text engineering team. Learn how to use the advanced font handling and blazingly fast Unicode layout capabilities of Core Text. Bring your laptop, your code, and your questions.&lt;br /&gt;
&lt;br /&gt;
*HIToolbox Lab&lt;br /&gt;
Work on tuning and debugging HIToolbox code in your Carbon application. Receive one-on-one technical assistance and troubleshooting advice from the High Level Toolbox engineering team, Apple DTS engineers, and technology evangelists. Bring your laptop, your code, and your questions.&lt;br /&gt;
&lt;br /&gt;
=== Our Objectives at the WWDC 2007 ===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;1) Connection OOo Mac team / Apple engineers&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
-Goal 1.1 : &amp;quot;Get infos, contacts, human to human conversation :-)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; Present our current work, methods and team to Apple people :&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; Meet them during WWDC : give us/them a face, keep contacts&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; Get their impression about what we have already done and what is still ToDo&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;2) Improve from Apple&amp;#039;s engineers expertise&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
-Goal 2.1 : &amp;quot;Give MacOS X users the OOo suite they deserve&amp;quot; &lt;br /&gt;
&lt;br /&gt;
 =&amp;gt; As mac platform and apple&amp;#039;s product fans, we are proud to bring the quality and power of OOo to mac users community&lt;br /&gt;
&lt;br /&gt;
 =&amp;gt; Make OOo uses all the power of Mac OSX, including upcoming Leopard !&lt;br /&gt;
&lt;br /&gt;
-Goal 2.2 : &amp;quot;OO.org Mac port has to be as Apple HIG compliant as possible&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 =&amp;gt; Define what is expected for User Interface of OpenOffice.org suite with people from Apple UI project&lt;br /&gt;
&lt;br /&gt;
 - FYI : Last year, Apple UI project proposed ericb to help us, once our native menus will be working. &lt;br /&gt;
   This is now done.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;3) Get code guidelines, tips, samples&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
-Goal 3.1 : &amp;quot;Ask for code review and find code snippets&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  - HIView&lt;br /&gt;
  - Printing&lt;br /&gt;
  - Drag and Drop&lt;br /&gt;
  - as muc has possible&lt;br /&gt;
&lt;br /&gt;
=&amp;gt; More than 1000 Apple engineers are present, and can answer our questions regarding the code, during the whole week&lt;br /&gt;
&lt;br /&gt;
-Goal 3.2 : &amp;quot;Attend key Labs and Sessions to get full overview of Tiger/Leopard/Core&amp;#039;s and useful code&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  - Core*&lt;br /&gt;
  - Tiger / Leopard&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;4) Social Contacts / Team emulation&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
-&amp;gt; Discuss and meet new developers and / or american people working for Mac OS X port (like Michael Sicotte, Vijay Venkatraman , other.. )&lt;br /&gt;
-&amp;gt; Share ideas, tips, conviviality !&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;5) Visibility&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
OpenOffice.org Native Mac port has to be recognized as the professionnal office suite for Mac users it is !&lt;br /&gt;
&lt;br /&gt;
=== Who ? ===&lt;br /&gt;
&lt;br /&gt;
* Sébastien Plisson&lt;br /&gt;
* Eric Bachard&lt;br /&gt;
&lt;br /&gt;
=== Todo list ===&lt;br /&gt;
&lt;br /&gt;
Please add topics, technical questions you would see asked by attendees to Apple engineers during WWDC&lt;br /&gt;
&lt;br /&gt;
====Suggestions for current issues to be fixed ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Timers : Current code is obsolete, and compatibility with Leopard won&amp;#039;t probably exist.  Pavel wrote a patch using recent code. Seems to work fine, excepted a thread issue ( crash not easy to be reproduced ) &lt;br /&gt;
&lt;br /&gt;
Salframe : &lt;br /&gt;
&lt;br /&gt;
Looot of things : &lt;br /&gt;
&lt;br /&gt;
*Find infos/code sample about parenting&lt;br /&gt;
&lt;br /&gt;
*Code review for HIFrameWork implementation &lt;br /&gt;
&lt;br /&gt;
*Menus :  every window creates it&amp;#039;s own menu. Redesign it ?&lt;br /&gt;
&lt;br /&gt;
*adapt native widget framework&lt;br /&gt;
&lt;br /&gt;
Events : code review, tips&lt;br /&gt;
&lt;br /&gt;
ATS : code review, ATS issues&lt;br /&gt;
&lt;br /&gt;
Mike Sicotte:  &lt;br /&gt;
I understood that implementing printing in aqua OOo was a topic that we didn&amp;#039;t get accepted into Google SOC - so remains on the ToDo list.  I notice that there are three Sessions specfically related to printing at WWDC:&lt;br /&gt;
    Leveraging the Common Unix Printing System (CUPS)&lt;br /&gt;
    Printing with Style in Mac OS X&lt;br /&gt;
    Printing Lab&lt;br /&gt;
If this is judged to be a good use of time at WWDC I would be willing to spend some time to help further develop the questions to be addressed with the Apple engineers.&lt;br /&gt;
&lt;br /&gt;
ericb-&amp;gt;Mike Sicotte&lt;br /&gt;
&lt;br /&gt;
Good idea. You are welcome :)&lt;br /&gt;
&lt;br /&gt;
==== Travel ====&lt;br /&gt;
&lt;br /&gt;
*describe the schedule of the travel&lt;br /&gt;
&lt;br /&gt;
ericb  : &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mulhouse -&amp;gt; Paris -&amp;gt; SF :  9th of June    SF scheduled arrival : 7:13 pm&lt;br /&gt;
SF -&amp;gt; Paris -&amp;gt; Mulhouse :  16th of June ( arrival 17th )  SF departure for the return :  3:00 pm&lt;br /&gt;
&lt;br /&gt;
Hotel : King Georges ( close to Union Square )&lt;br /&gt;
&lt;br /&gt;
Airport to Hotel transportation : not included&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sebastien (aka plipli) : &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Paris-&amp;gt;SF : 3rd June&lt;br /&gt;
SF-&amp;gt;Paris : 15th June in the evening&lt;br /&gt;
&lt;br /&gt;
Hotel : to be coompleted&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Misc ====&lt;br /&gt;
&lt;br /&gt;
*don&amp;#039;t forget sector adaptator for laptop : US connectors are &amp;#039;&amp;#039;&amp;#039;different&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
*don&amp;#039;t forget Cameras ( and chargers)&lt;br /&gt;
&lt;br /&gt;
*Prepare 50 to 100 business cards  :  the most simple is to use the model I can provide on demand , and print them with special paper ( pre-cut )&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Mac OS X porter Team at OOoCon 2007&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
=== Who ? ===&lt;br /&gt;
&lt;br /&gt;
* Shaun McDonald&lt;br /&gt;
* Eric Bachard&lt;br /&gt;
* (list to be completed)&lt;br /&gt;
&lt;br /&gt;
=== What ? ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The conference is over 3 days. Presentations should last around 45 minutes. http://www.openoffice.org/servlets/ReadMsg?list=announce&amp;amp;msgNo=320 Papers have to be submitted by 1st June to be considered.&lt;br /&gt;
&lt;br /&gt;
Ideas :&lt;br /&gt;
&lt;br /&gt;
Mike Sicotte:  Perhaps the results of the Google SOC could be a presentation.&lt;br /&gt;
&lt;br /&gt;
*create a complete topic for Mac port (one stream for a day or half day)&lt;br /&gt;
*How to improve ooo usability though the use of floating palettes instead of modal dialogs&lt;br /&gt;
&lt;br /&gt;
- several presentations / BOF &lt;br /&gt;
&lt;br /&gt;
Eric Bachard : Aqua OpenOffice.org ( conf / 1 hour )&lt;br /&gt;
&lt;br /&gt;
Others ?&lt;br /&gt;
&lt;br /&gt;
*reserve rooms together ? Better rent a house? &lt;br /&gt;
&lt;br /&gt;
* [FIXME]&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;2nd Mac porters meeting&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
This section has been moved to [[2nd Mac porters meeting]]&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;IRC Mac port meetings&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
This section has been moved to [[MacOSXPortMeetings]].&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Mac OS X (X11) Quality Assurance&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
This section has been moved to [[Mac OS X ( X11) Quality Assurance]]&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Mac OS X Implementing HIView and Carbon events&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
This section has been moved to [[Mac OS X Implementing HIView ]]&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Debug OpenOffice.org using XCode &amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
[[ MacOSX Debug OpenOffice.org using XCode]]&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Description of the Native Port problem&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
=== How does OpenOffice.org work on Mac OS X? ===&lt;br /&gt;
&lt;br /&gt;
Currently, on Mac OS X, OpenOffice.org uses X11, as &amp;quot;client&amp;quot;: X11 is a graphical server, coming from Unix world, and able to run under Linux, *BSD, Solaris, Mac OS X.&lt;br /&gt;
&lt;br /&gt;
 - X11 is run as an application, managed like other Apple applications.&lt;br /&gt;
 - All unix like applications are managed by X11, and from Aqua environment, only X11 is seen as only one applicatiion, &lt;br /&gt;
  even if other Unix/Linux (e.g.) applications are runing.&lt;br /&gt;
&lt;br /&gt;
OpenOffice.org asks X11 to display a window, waits for X11 acknowledgment, and OpenOffice.org displays the window. All transactions use the network, locally or not. the same mechanism is used for everything to be displayed.&lt;br /&gt;
&lt;br /&gt;
[[User:Ericb|Ericb]] 11:39, 3 June 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
=== Issues and known problems ===&lt;br /&gt;
&lt;br /&gt;
All events are managed by OpenOffice.org and X11, using the Xlib&lt;br /&gt;
&lt;br /&gt;
Only .ttf fonts type is currently available. Note: &amp;#039;&amp;#039;&amp;#039;system fonts are available &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
The rendering is made by X11, not by Mac OS X rendering engine.&lt;br /&gt;
&lt;br /&gt;
X11 and all its clients are seen as one application only: drag and drop protocol does not work because of that (solution: Pasteboard Manager)&lt;br /&gt;
&lt;br /&gt;
==== Other links ====&lt;br /&gt;
&lt;br /&gt;
http://wiki.services.openoffice.org/wiki/List_of_OpenOffice.org_Mac_OS_X_issues_and_problems#&lt;br /&gt;
&lt;br /&gt;
http://wiki.services.openoffice.org/wiki/Printing_problems_with_OpenOffice.org_2.0_for_Mac_OS_X#Reporting_printing_problems&lt;br /&gt;
&lt;br /&gt;
[[User:Ericb|Ericb]] 11:39, 3 June 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
== What do we have to do?==&lt;br /&gt;
&lt;br /&gt;
* (in progress) : Implement direct access to Apple graphical engine, using Apple API: Quartz2D/CoreGraphics (and replacing Xlib use)&lt;br /&gt;
&lt;br /&gt;
like: instantiate, manage events and threads for a graphical instance + all needed objects, drawing: manage all drawing cases&lt;br /&gt;
&lt;br /&gt;
* (in progress) : Implement native events management, using CarbonEventManager (replacing Xlib management)&lt;br /&gt;
&lt;br /&gt;
* (in progress) : Implement native font use, using Apple Type Server and ATSUI (for Unicode Imagery) (replacing X11 management)&lt;br /&gt;
&lt;br /&gt;
Work in progress: [[Mac OS X Porting - Native Fonts]]&lt;br /&gt;
&lt;br /&gt;
* Implement native sound, using QuickTime (replacing Java Media Framework): [[Mac OS X Porting - Native Audio and Video]]&lt;br /&gt;
&lt;br /&gt;
* Implement native Drag and drop, Implementing Pasteboard Manager: [[Mac OS X Porting - Native Drag and drop]]&lt;br /&gt;
&lt;br /&gt;
* (done experimental) Implement Native Filepicker&lt;br /&gt;
&lt;br /&gt;
* Implement Native Printing: current uses cups, but native printing is mandatory: [[Mac OS X Porting - Native_Printing]]&lt;br /&gt;
&lt;br /&gt;
* Implement Apple Spellchecker&lt;br /&gt;
&lt;br /&gt;
--[[User:Plipli|Plipli]] 09:27, 25 March 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Where is located the code to be modified?&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
Most of the changes are located in vcl (Visual Class Layer), for everything graphical, events, fonts, rendering and printing.&lt;br /&gt;
&lt;br /&gt;
Other, for sound and movies will be in avmedia (where the player is implemented in OpenOffice.org sources).&lt;br /&gt;
&lt;br /&gt;
For drag and drop, dtrans is concerned (Pasteboard Manager implementation)&lt;br /&gt;
&lt;br /&gt;
[FIXME]: Filepicker? Apple Spellchecker?&lt;br /&gt;
&lt;br /&gt;
[[User:Ericb|Ericb]] 11:39, 3 June 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;How will the new implementation be tested?==&lt;br /&gt;
&lt;br /&gt;
Currently, all openOffice.org code can be compiled without using the Xlib. but of course, a lot of features are missing,&lt;br /&gt;
&lt;br /&gt;
and the final package simply won&amp;#039;t work&lt;br /&gt;
&lt;br /&gt;
In vcl module&amp;quot;, a &amp;#039;&amp;#039;&amp;#039;toy&amp;#039;&amp;#039;&amp;#039; called svdem is built at buildtime. This binary is linked to libvcl* and so all new stuff can be tested.&lt;br /&gt;
&lt;br /&gt;
e.g. : draw anti-aliased lines works well. &lt;br /&gt;
&lt;br /&gt;
Everything implemented in aqua vcl code will be included in libvclplug_aqua, and svdem source code will contain a specific part to proceed tests.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;messagebox cleanup metadata&amp;quot; style=&amp;quot;border:1px solid blue;background-color:#B3FFF5;padding:7px;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;The magic is: when all needed features will work with svdem, it will work in the new version of OpenOffice.org !!&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[FIXME]: add more complete list of features to implement and test.&lt;br /&gt;
&lt;br /&gt;
== AquaVCL 01 cws ==&lt;br /&gt;
&lt;br /&gt;
[[http://qa.openoffice.org/issues/buglist.cgi?keywords=aqua Top 10 of Aqua issues]]&lt;br /&gt;
&lt;br /&gt;
[[Aquavcl01 tasks]]&lt;br /&gt;
&lt;br /&gt;
===Changelog ===&lt;br /&gt;
&lt;br /&gt;
====Work in progresss : alpha 0.7 ====&lt;br /&gt;
&lt;br /&gt;
Sun decided to officialy supports the Mac OS x port  ( 3rd May )&lt;br /&gt;
&lt;br /&gt;
Welcome to Philipp Lohmann and Herbert Duerr , who joined the Team  ( 3rd May )&lt;br /&gt;
&lt;br /&gt;
resync m211 ( 1st May )&lt;br /&gt;
&lt;br /&gt;
[Top 10 of issues] modify Bundle tree (issue 73693) : change committed 28th April ( ericb) &lt;br /&gt;
&lt;br /&gt;
Google SoC : welcome to Ismael Merzaq and Omer BarOr , our two selected candidates : ismael will work on aqua look ( NWF), and Omer will work on Mac OS X Address Book Integration.&lt;br /&gt;
&lt;br /&gt;
resync : m208 ( 11th April )&lt;br /&gt;
&lt;br /&gt;
(exp / not commited ) Ismael proposed a patch for Utility Windows more Aqua compliant + SetMin/MaxSize()  ( 9th April )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Native menus are defaults (ericb)   ( 8th April ) &lt;br /&gt;
&lt;br /&gt;
Frederic Barbaise (alias boulifb) joined the port ( 3rd April )&lt;br /&gt;
&lt;br /&gt;
Work on saltimer.cxx started mikesic ( 27th March ) &lt;br /&gt;
&lt;br /&gt;
Pavel commited Michael patch for invert and drawAlphaRect()  (27th March )&lt;br /&gt;
&lt;br /&gt;
Started 27th March&lt;br /&gt;
&lt;br /&gt;
==== alpha 0.6 ====&lt;br /&gt;
&lt;br /&gt;
Damien started to work on drawEPS() &lt;br /&gt;
&lt;br /&gt;
plipli and ericb work on refresh&lt;br /&gt;
&lt;br /&gt;
Michael Sicotte proposed to investigate in timers, and continue [[http://www.openoffice.org/issues/show_bug.cgi?id=75228 Pavel&amp;#039;s work]] : objective is to replace obsolete code.  ( 23th March)&lt;br /&gt;
&lt;br /&gt;
[experimental] plipli proposed a patch for a new salframe implementation, using HIView + optionally compositing  (21th March )&lt;br /&gt;
&lt;br /&gt;
[commit scheduled] Michael Sicotte proposed a complete patch for invert() ( SAL_INVERT SAL_INVERT_50 and SAL_INVERT_TRACKFRAME )  (20th March )&lt;br /&gt;
&lt;br /&gt;
Tino proposed to work on code cleanup in salatsuifontutils.cxx, removing obsolete code &lt;br /&gt;
&lt;br /&gt;
ismael and michael work on invert() + drawAlphaRect() &lt;br /&gt;
&lt;br /&gt;
Started (19th March ) :&lt;br /&gt;
&lt;br /&gt;
==== alpha 0.5====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Top 10 Summary :  7 issues over 10 are fixed or very close to be : &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;time to code review, tracing, and search for memory leaks&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[done] Unicode input in salframe ( ekato ) ( 19th March )&lt;br /&gt;
&lt;br /&gt;
[experimental, works partially] beginning of HIView + HIComboxes works (text still missing)  (ericb + plipli)  ( 14th March ) &lt;br /&gt;
&lt;br /&gt;
[done] replace NewRgn() in salframe (ericb (11th March )&lt;br /&gt;
&lt;br /&gt;
[experimental, but very interesting] Improved native windows ( ismael ) ( 7th March )&lt;br /&gt;
&lt;br /&gt;
====alpha 0.4==== &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[Informative]&amp;#039;&amp;#039;&amp;#039; build runs with Leopard 9A377a ( fheckl ) ( 7th March ) &lt;br /&gt;
&lt;br /&gt;
Refresh screen issues  (plipli) (4th to 10th March )&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[informative]&amp;#039;&amp;#039;&amp;#039;  plipli announced  progress with refresh screen issues  ( 28th February )&lt;br /&gt;
&lt;br /&gt;
[experimental, not yet commited] Proxy configuration from system ( pjanik)  ( 28th February )&lt;br /&gt;
&lt;br /&gt;
[done] highlighted native button ( pjanik)  ( 27th February ) &lt;br /&gt;
&lt;br /&gt;
Native File Picker works ( fheckl  / pjanik )  ( 23th February  )&lt;br /&gt;
&lt;br /&gt;
====alpha 0.3====&lt;br /&gt;
&lt;br /&gt;
Cursor does appear -&amp;gt; invert() + setting a setBlinkTime value in UpdateSettings()  (pjanik /ericb ) &lt;br /&gt;
&lt;br /&gt;
[done] mirroring negative images (ismael) + DrawAlphaBitmap() + CreateWithMask()&lt;br /&gt;
&lt;br /&gt;
pjanik patch for Focus Events &lt;br /&gt;
&lt;br /&gt;
[done] scrolling works ( pjanik ) (17th February )&lt;br /&gt;
&lt;br /&gt;
[done ] carret works ( plipli) (17th February )&lt;br /&gt;
&lt;br /&gt;
[done] checkbuttons fix for checkmarks  (ericb) ( 17th February )&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[Informative]&amp;#039;&amp;#039;&amp;#039; Pavel Janik propose to solve offScreen buffer using HIView ( 17th February ) &lt;br /&gt;
&lt;br /&gt;
[experimental, never commited] patch for macosxrc.txt use + UpdateSettings() use in salframe.cxx ( ericb ( 16th February )&lt;br /&gt;
&lt;br /&gt;
Michael Sicotte joined the Team ( 15th February )&lt;br /&gt;
&lt;br /&gt;
invert() : first try  (ericb)   ( 13th february )&lt;br /&gt;
&lt;br /&gt;
====alpha 0.2====&lt;br /&gt;
&lt;br /&gt;
[12th February 2007 ]&lt;br /&gt;
&lt;br /&gt;
[done] calc does not start : bug identified by tino , first workaround (ericb)   [[http://www.openoffice.org/issues/show_bug.cgi?id=73691 issue 73691]]&lt;br /&gt;
&lt;br /&gt;
[done] bitmaps in native popup menus (ismael)  &lt;br /&gt;
&lt;br /&gt;
[done]  replace obsolete code for HandleWindowPaintEvent(), newRgn() .. etc  (ericb)  (12th February)&lt;br /&gt;
&lt;br /&gt;
correct salatslayout patch (plipli)  ( 11th February)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[Informative]&amp;#039;&amp;#039;&amp;#039;  Michel Renon proposed a summary about his work on fonts issues&lt;br /&gt;
&lt;br /&gt;
[patch] Pavel fixed several menu crashes (09th February )&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[Informative]&amp;#039;&amp;#039;&amp;#039; : Pavel posted a mail about several crashes origin &lt;br /&gt;
 &lt;br /&gt;
patch for radioboxes and checkboxes ( ericb ) (9th February)&lt;br /&gt;
&lt;br /&gt;
first complete patch for salatslayout.cxx ( plipli) ( 9th February )&lt;br /&gt;
&lt;br /&gt;
[done] most important crashes fixed ( pjanik)  ( 09th february )&lt;br /&gt;
&lt;br /&gt;
Modified baseline for 2.2. : Mac OS X10.4 -&amp;gt; Aqua will be 10.4 and 10.5 compatible only ( ericb)&lt;br /&gt;
&lt;br /&gt;
first try with multi line sallayout (plipli )  ( 08th February )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Damien Duportal joined the Team ( 7th February ) &lt;br /&gt;
&lt;br /&gt;
[done] scrollbar changes (ericb )   ( 4th February )&lt;br /&gt;
&lt;br /&gt;
====alpha 0.1====&lt;br /&gt;
&lt;br /&gt;
create Top 10 of issues before alpha  3rd February 2007 :  See : [[http://porting.openoffice.org/mac/news/2007/20070203toptenbeforealpha.html Top 10 of issues]]&lt;br /&gt;
&lt;br /&gt;
[experimental, not commited] patch for TPT() implementation (ericb)  ( 2nd February 2007 )&lt;br /&gt;
&lt;br /&gt;
Pavel Janik proposed to implement TransformProcessType() ( 2nd February 2007 )&lt;br /&gt;
&lt;br /&gt;
[not commited] implement UpdateSettings()   (ericb)  &lt;br /&gt;
&lt;br /&gt;
Pavel Janik resynchronized aquavel01 cws  with m202  ( 2nd February 2007 )&lt;br /&gt;
&lt;br /&gt;
====alpha 0.03====&lt;br /&gt;
&lt;br /&gt;
Michel Renon joined the Team (1st February )&lt;br /&gt;
&lt;br /&gt;
[done] fix checkbuttons and radiobuttons issues: offsets, redrawing of the check marks ( ericb) &lt;br /&gt;
&lt;br /&gt;
[done] fix scrollbar buttons (implement correct methods to retrieve dimensions)&lt;br /&gt;
&lt;br /&gt;
[done] implement mapfiles for Mac OS X (Stephan Bergmann, Daniel Boelzle, Tino Rachui , Pavel Janik)&lt;br /&gt;
&lt;br /&gt;
====alpha 0.02====&lt;br /&gt;
&lt;br /&gt;
[done] modify libsalsystools.dylib to be correctly loaded with the bundle  (ericb, + pjanik)&lt;br /&gt;
&lt;br /&gt;
[done] add mouse drag events  ( pjanik )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====alpha 0.01====&lt;br /&gt;
&lt;br /&gt;
[done] add new feature for Aqua windows, to allow QuickTime player use( mox )&lt;br /&gt;
&lt;br /&gt;
[done] replace obsolete code in salframe.cxx with (ericb)&lt;br /&gt;
&lt;br /&gt;
[done] fix correct size for main window (GetOptimaWindowSize()  ) (ericb)&lt;br /&gt;
&lt;br /&gt;
[done] fix alpha channel in pixmaps (ismael)&lt;br /&gt;
&lt;br /&gt;
====alpha 0.0====&lt;br /&gt;
&lt;br /&gt;
[done] pushbutton where not correctly drawn (ericb)&lt;br /&gt;
&lt;br /&gt;
[done] fix missing mouse events  (pjanik)&lt;br /&gt;
&lt;br /&gt;
[done] fix nRepeat in text entry  (ssa)&lt;br /&gt;
&lt;br /&gt;
2nd Mac porters Meeting&lt;br /&gt;
&lt;br /&gt;
===Work in progress ===&lt;br /&gt;
&lt;br /&gt;
URGENT :&lt;br /&gt;
&lt;br /&gt;
Top of issues causing crashes : event issue when tips is enabled causes crashes ( well known window / handler  / window desctructor / event loop bug )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Salatsuifontutils :  replace old code, track leaks : tino&lt;br /&gt;
&lt;br /&gt;
[done] Bitmaps : ( isma87) &lt;br /&gt;
&lt;br /&gt;
[running]  Crashes : (tino, pjanik, ericb, isma87, plipli )&lt;br /&gt;
&lt;br /&gt;
[???] Drag and drop :   (vijay)&lt;br /&gt;
&lt;br /&gt;
[???] Printing   (ybart)  &lt;br /&gt;
&lt;br /&gt;
Florian Heckl proposed a subject for Google Summer of Code about native printing&lt;br /&gt;
&lt;br /&gt;
Drawing/ windowing ( plipli / ericb ) -&amp;gt; mainly refresh &lt;br /&gt;
&lt;br /&gt;
[done] Implement cursor &lt;br /&gt;
&lt;br /&gt;
[started] Native Controls   (ericb) &lt;br /&gt;
&lt;br /&gt;
[work in progress] partial multiline sallayout  (plipli )&lt;br /&gt;
&lt;br /&gt;
To do : &lt;br /&gt;
&lt;br /&gt;
(started, Oliver) - modify the tree to make the bundle start without hack ( issue fixed during buildtime) &lt;br /&gt;
&lt;br /&gt;
(started, Florian Heckl)  verify Native FilePicker implementation ( works , tested in Hamburg  )&lt;br /&gt;
&lt;br /&gt;
[done] Ismael Merzaq)  implement blit functions in salgdi  ( important fix:  probably apha version to be tested once done) &lt;br /&gt;
&lt;br /&gt;
[done] Sebastien Plisson- update the missing functions list ( fonts ... ask hdu &amp;amp; cl&lt;br /&gt;
&lt;br /&gt;
[started] ericb, Mox Soini, Sebastien Plisson, Tino Rachui, Pavel janik continue to replace obsolete code&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
fix crashes with menus  (started : tino )&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Sort of documentation about VCL around Native Mac OS X port&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Do we really need to understand how it works? ;-)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vcl content:&lt;br /&gt;
&lt;br /&gt;
ls -laR | wc -l&lt;br /&gt;
  1750&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; Uff 1750 files to analyse :-/&lt;br /&gt;
&lt;br /&gt;
Our purpose is to describe the vcl organisation. The content of vcl is so important, that at the begining, the content will looks a bit confused. e.g. class names ..etc have nothing to do, only description with words and sense, but this will need some time before we can understand everything.&lt;br /&gt;
&lt;br /&gt;
How analyse with more efficiency? After some months to anlalyse &amp;#039;&amp;#039;&amp;#039;&amp;quot;horizontaly&amp;quot;&amp;#039;&amp;#039;&amp;#039;, it appears that list all the content of a directory is not the solution. Of course, we learned a lot, but we now have to complete with &amp;#039;&amp;#039;&amp;#039;&amp;quot;orthogonal&amp;quot;&amp;#039;&amp;#039;&amp;#039; method (compared to the previous one). The first method wasn&amp;#039;t obviously not the good/best way to describe vcl.&lt;br /&gt;
 &lt;br /&gt;
[FIXME] a different approach (will ask confirmation to Philipp Lohman), could be a description of how it work in runtime. First define what an instance is, a frame, and what exactly is concerned by such &amp;quot;objects&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
With that, we can write a list of different objects all using the same scheme: empty boxes (means pure virtual methods and classes in generic libvvcl), really implemented in the specific part, and finally, the API &amp;quot;encapsulated&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The most difficult is to see where the API is used. But for all the parts, this is the same.&lt;br /&gt;
&lt;br /&gt;
Finally, &amp;#039;&amp;#039;&amp;#039;what is important is the design of vcl&amp;#039;&amp;#039;&amp;#039;. Which &amp;#039;&amp;#039;&amp;#039;patterns&amp;#039;&amp;#039;&amp;#039; are used? What are the dependencies, how works the stack for the events, how works the scheduler, the timers too is very important, even fundamental for Aqua implementation. Will have a look at gsl mailing list, and other resources. Probably everything is already (randomly) written somewhere.&lt;br /&gt;
&lt;br /&gt;
=== VCL organisation ===&lt;br /&gt;
&lt;br /&gt;
Thank&amp;#039;s to Philipp Lohmann for this short, but precise description:&lt;br /&gt;
&lt;br /&gt;
Basically vcl is divided in the system dependent and the system independent part. The interface between these two is mostly the Sal interface (every interface name Sal*: SalInstance, SalFrame, SalGraphics, SalPrinter, etc.).&lt;br /&gt;
&lt;br /&gt;
SalInstance is a factory that can create all the other abstracted interfaces of the system dependent part. It also provides the main loop SalInstance::Yield()&lt;br /&gt;
&lt;br /&gt;
SalFrame abstracts any kind of system window.&lt;br /&gt;
&lt;br /&gt;
SalVirtualDevice abstracts an offscreen window (e.g. a Pixmap on X11)&lt;br /&gt;
&lt;br /&gt;
SalPrinter and SalInfoPrinter abstract the system print queues where SalInfoPrinter is for querying and SalPrinter for actual printing.&lt;br /&gt;
&lt;br /&gt;
SalGraphics is an interface produced by either SalFrame, SalVirtualDevice or SalPrinter which is used for actual drawing operations (text, bitmaps, vector graphics)&lt;br /&gt;
&lt;br /&gt;
SalSound is for sound playing.&lt;br /&gt;
&lt;br /&gt;
SalBitmap provides memory for bitmap graphics as well as methods converting this memory to a system handle (e.g. a Pixmap on X11).&lt;br /&gt;
&lt;br /&gt;
SalOpenGL provides OpenGL functionality if available.&lt;br /&gt;
&lt;br /&gt;
SalTimer is an interface for periodically triggering the event queue (to timer implementation).&lt;br /&gt;
&lt;br /&gt;
SalI18NImeStatus handles how the status window of an Input Method Editor (IME) should display (this is mainly X11 specific).&lt;br /&gt;
&lt;br /&gt;
SalSystem has some system specific methods that did not belong anywhere else:-)&lt;br /&gt;
&lt;br /&gt;
Of all these there interfaces is at least one implementation per system (Windows, X11 or Mac). The Unix implementation also has a plugin concept to allow for integration of different native toolkits (currently gtk and Qt) which became necessary for the implementation of Native Widget Framework (NWF) to display controls like their normal desktop counterparts.&lt;br /&gt;
&lt;br /&gt;
Basically the independent part (what is beneath vcl/source directory) has generic methods for drawing, window handling and stuff which it brings into a suitable form and then delegates to the system specific implementation (located beneath vcl/win for Windows and vcl/unx for the X11 platforms).&lt;br /&gt;
&lt;br /&gt;
[[User:Ericb|Ericb]] 16:12, 1 July 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
===Sub-directories description ===&lt;br /&gt;
&lt;br /&gt;
==== &amp;#039;&amp;#039;&amp;#039;Organisation of vcl directories&amp;#039;&amp;#039;&amp;#039; ====&lt;br /&gt;
&lt;br /&gt;
[[Image:aquavcl_organisation_complete_02.jpg]]&lt;br /&gt;
&lt;br /&gt;
==== &amp;#039;&amp;#039;&amp;#039;Directories in vcl. Short description&amp;#039;&amp;#039;&amp;#039; ====&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; aqua &amp;#039;&amp;#039;&amp;#039;: The name Aqua means Apple look and feel, and is well known as [http://developer.apple.com/documentation/UserExperience/Conceptual/OSXHIGuidelines/XHIGIntro/chapter_1_section_1.html Aqua Human Interface Guidelines]. This look and feel means Mac OS X. The work was begun by (probably) P. luby, Dan Williams Herbert Duerr (most of fonts stuff) and Ed Peterlin. Currently in ruin, this directory does contain a lot of ideas to investigate. The most important part of needed changes for native version (3.0) will be done inside aqua dir inc: does contain all vcl relative includes [PART1]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; prj &amp;#039;&amp;#039;&amp;#039;: Does contain build.lst and d.lst build.lst give us dependencies: probably a lot for vcl, build 98th module over ~148. Everything graphical depends in vcl. &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; qa &amp;#039;&amp;#039;&amp;#039; does contain all quality assurancy stuff&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;source&amp;#039;&amp;#039;&amp;#039;: the most important:-) This directory contains common sources for all architectures and OS. Mainly: Windows, Unix: Linux , Mac OS X (X11), Solaris, including generic, kde and gtk plugins, and Aqua (Mac OS X without X11, work currently in progress). &lt;br /&gt;
&lt;br /&gt;
Depending on the OS and the architecture, binaries are built or not.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; test &amp;#039;&amp;#039;&amp;#039;: This directory does contain all the needed stuff for tests. As example, in qa/testdocuments, you&amp;#039;ll find three documents (one writer, one calc and one impress) for tests purpose. &lt;br /&gt;
Other available tests are about memcheck and persistent window state. &lt;br /&gt;
 &lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; unx &amp;#039;&amp;#039;&amp;#039;: this directory does contain all unixes stuff. We have to understand what is inside to implement aqua port. For example, a lot of classes/strutures and objects use Xlib calls we have to replace with Carbon/Cocoa call (at least at first time) for Mac OS X native port.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; win &amp;#039;&amp;#039;&amp;#039;: Doing Mac OS X native port, I first believed this directory was not interesting for us, but I was wrong: OpenOffice.org roots are inside this directory, and a lot of comments and resources are inside. Mainly interesting if Carbon is used.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;workben&amp;#039;&amp;#039;&amp;#039;: Does contain a toy called &amp;quot;svdem&amp;quot;. svdem is a binary, used for new implementations. For example, actual aqua development uses svdem intensively, to verify all important properties we need: &lt;br /&gt;
&lt;br /&gt;
- display a window first (al least ...:)) &lt;br /&gt;
&lt;br /&gt;
- close cleanly this window&lt;br /&gt;
&lt;br /&gt;
- display a point&lt;br /&gt;
&lt;br /&gt;
- trace a line&lt;br /&gt;
&lt;br /&gt;
- trace an area &lt;br /&gt;
&lt;br /&gt;
- superpose two areas doing some important graphical operations, (like xor),&lt;br /&gt;
&lt;br /&gt;
- display a character&lt;br /&gt;
&lt;br /&gt;
- display a menu. &lt;br /&gt;
&lt;br /&gt;
- intercept events correctly.&lt;br /&gt;
&lt;br /&gt;
[FIXME] add more tests&lt;br /&gt;
&lt;br /&gt;
[[User:Ericb|Ericb]] 13:21, 3 June 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Naming convention&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
* Class names start with upper case letters, to improve readability.&lt;br /&gt;
&lt;br /&gt;
* Implemented Class names are derived from the virtual classes but can of course take arbitrary names.&lt;br /&gt;
To increase readability, it&amp;#039;s recommended to closely follow the base class name.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Impl prefix: means Implementation details&amp;#039;&amp;#039;&amp;#039;. The concerned class or method or function is not used outside of this module, so no external code (or other libraries) can see it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[ Events types using Carbon API (Mac OS X): ]]&amp;#039;&amp;#039;&amp;#039; A lot of events have to be managed in runtime. Here is a short description&lt;br /&gt;
&lt;br /&gt;
- do not freeze because bad event loops&lt;br /&gt;
&lt;br /&gt;
- event types implementation: currently, they are defined in vcl/aqua/inc/aquavclevents.hxx&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Apart: exact sense of hedabu? -&amp;gt; [FIXME] as far as I understood it: it is like &amp;quot;copy&amp;quot; to deliver software into the solver, with extra magic. The header files for example are manipulated so paths need not be exact. &amp;quot;headabu&amp;quot; is supposed to disappear little by little.&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;What do we have to build in vcl?&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
Two libraries, corresponding ressources (localized) and a toy so called « svdem »&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Common part&amp;#039;&amp;#039;&amp;#039;: &lt;br /&gt;
&lt;br /&gt;
in grey on right. The result will be a non architecture dependant library, built in all cases: for instance, libvcl680mxi.dylib on Mac Intel.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Specific part  &amp;quot; a plugin &amp;quot; &amp;#039;&amp;#039;&amp;#039;: &lt;br /&gt;
&lt;br /&gt;
Light yellow: aqua part will only concern Mac OS X (non X11) the name will probably be libvcl_aqua680mxi.dylib &lt;br /&gt;
&lt;br /&gt;
As you can see, win means windows part, in blue&lt;br /&gt;
&lt;br /&gt;
For Unix build (Linux, Solaris or current Mac OS X X11), in purple.&lt;br /&gt;
&lt;br /&gt;
Result will be:&lt;br /&gt;
&lt;br /&gt;
libvclplug_PLUGIN680mxi.DLLSUFFIX , where PLUGIN can be iether gen (generic) or gtk (using gtk+) or kde (using qt), and DLLSUFFIX can be either .so (linux) or .dylib (Mac OS X) ...etc (I&amp;#039;m not sure for other cases).&lt;br /&gt;
&lt;br /&gt;
Example: libvcl680mxi.dylib and libvclplug_aqua680mxi.dylib&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;In runtime&amp;#039;&amp;#039;&amp;#039;, libvclplug_aqua will be linked to libvcl680. the first one will contain the real implementation (respecting the API, e.g. Carbon) while the generic libvcl will only contain pure virtual methods ...etc like &amp;quot;empty boxes&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Current Aqua content ===&lt;br /&gt;
&lt;br /&gt;
A more complete description of aqua (Mac OS X / no X11 specific): [[Image:Vcl_aqua_organisation_02_tree.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==EXISTING objects to build in aqua==&lt;br /&gt;
&lt;br /&gt;
===Sal APP &amp;quot;everything application&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
[FIXME] add all objects descriptions&lt;br /&gt;
&lt;br /&gt;
==== saldata ====&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Defined in plugin exclusively&amp;#039;&amp;#039;&amp;#039; (i.e. for headers)&lt;br /&gt;
&lt;br /&gt;
Unix: unx/source/app/saldata.cxx (header in unx/inc)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Aqua: aqua/source/app/saldata.cxx (header in win/inc)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Windows: win/source/app/saldata.cxx (header in aqua/inc)&lt;br /&gt;
&lt;br /&gt;
* Role: saldata contains various kind of data used by the implementation for the concerned platform. &amp;#039;&amp;#039;&amp;#039;It is a bunch of global data collections reserved for the platform&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
It is just completely platform dependent, and nobody except this plugin can see it.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Saldata is something like a &amp;quot;second sal&amp;quot;, but providing an abstraction regarding windowing and graphics&amp;#039;&amp;#039;&amp;#039;, while SAL module provides an abstraction more Operating System oriented) &lt;br /&gt;
&lt;br /&gt;
e.g. : have a look at XRequest array in vcl/unx/source/app/saldata.cxx =&amp;gt; all calls are for Xlib (X11).  Ok, useless there, but interesting:-)&lt;br /&gt;
&lt;br /&gt;
[FIXME]: use Windows implementation could be a good starting point. Nothing is the same, but the current aquavcl cws uses similar objects, and it works very correctly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
saldatax.cxx uses classes SalInstance, SalObject, SalFrame, SalVirtualDevice, SalPrinter and fontList.&lt;br /&gt;
&lt;br /&gt;
Current list of possible objects who can be instantiated/released:&lt;br /&gt;
&lt;br /&gt;
structure SalData: does contain pointers on all kind of objects from other classes used in saldata.&lt;br /&gt;
&lt;br /&gt;
inline functions: [FIXME]: complete the description&lt;br /&gt;
&lt;br /&gt;
- SetSalData:&lt;br /&gt;
- GetSalData:&lt;br /&gt;
- GetAppSalData:&lt;br /&gt;
&lt;br /&gt;
==== salinst ====&lt;br /&gt;
&lt;br /&gt;
=&amp;gt; implemented in vcl/aqua/source/app/salinst.cxx&lt;br /&gt;
&lt;br /&gt;
Role: &lt;br /&gt;
&lt;br /&gt;
* get environment, mutexes, instantiate AquaSalInstance (Ctor, Dtor),&lt;br /&gt;
&lt;br /&gt;
* instantiates/releases a lot of other objects using Get() / CreateObject() / DestroyObject() methods.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Current list of possible objects who can be instantiated/released:&lt;br /&gt;
&lt;br /&gt;
 * VirtualDevice [FIXME]: exact role?&lt;br /&gt;
&lt;br /&gt;
 *Printer  &lt;br /&gt;
&lt;br /&gt;
- GetDefaultPrinter/ CreatePrinter() / DestroyPrinter - what a name ;-) -&lt;br /&gt;
&lt;br /&gt;
- InfoPrinter (Get/Create/Delete)&lt;br /&gt;
&lt;br /&gt;
- PrinterQueue (DeletePrinterQueueInfo / GetPrinterQueueInfo / GetPrinterQueueState)&lt;br /&gt;
&lt;br /&gt;
 * System (Create / Delete) [FIXME]: what means system here?&lt;br /&gt;
&lt;br /&gt;
 * Events: &lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::SetEventCallback()&lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::SetErrorEvenCallback()&lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::GetConnectionIdentifier()&lt;br /&gt;
&lt;br /&gt;
 * Menu / MenuItem: &lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::CreateMenu() / same for DestroyMenu()&lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::CreateMenuItem / same DestroyMenuItem()&lt;br /&gt;
&lt;br /&gt;
 * Sound: &lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::CreateSalSound()  =&amp;gt; object to a pointer of SalSound type&lt;br /&gt;
&lt;br /&gt;
Note: AquaSalInstance::DestroySalSound is not implemented (?)&lt;br /&gt;
&lt;br /&gt;
 * Timer: CreateTimer() /&lt;br /&gt;
&lt;br /&gt;
AquaSalInstance:: DestroyTimer() is not yet implemented (?)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Class MacImeStatus: inherits of SalI18NImeStatus&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; only there to see if there is a window to toggle into menubar [FIXME]??&lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::CreateI18NImeStatus(): instantiates MacImeStatus&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;For futher informations, see: &amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;[[Content of salinst.cxx]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
([[User:Ericb|Ericb]] 16:11, 20 May 2006 (CEST) )&lt;br /&gt;
&lt;br /&gt;
==== salmain ====&lt;br /&gt;
&lt;br /&gt;
Role: if possible, runs the standard vcl application code SVMain()&lt;br /&gt;
&lt;br /&gt;
([[User:Ericb|Ericb]] 16:15, 20 May 2006 (CEST))&lt;br /&gt;
&lt;br /&gt;
==== salsound ====&lt;br /&gt;
&lt;br /&gt;
==== salsys ====&lt;br /&gt;
&lt;br /&gt;
==== saltimer ====&lt;br /&gt;
&lt;br /&gt;
==== saltimer ====&lt;br /&gt;
&lt;br /&gt;
The main problem with SalTimer is the code we use is obsolete. To remove this deprecated code, sevarl work have been tried &lt;br /&gt;
&lt;br /&gt;
1) Pavel Janik, in issue 75228 &lt;br /&gt;
&lt;br /&gt;
works, but a serious problem is remaining (a thread issue, nothing anybody explained yet) &lt;br /&gt;
&lt;br /&gt;
2) eric bacahrd ( code will be attached soon )&lt;br /&gt;
&lt;br /&gt;
3) Michael Sicotte, who proposed to work on that, and continue Pavel implementation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SalTimer description&lt;br /&gt;
&lt;br /&gt;
AquaSalTimerproc&lt;br /&gt;
&lt;br /&gt;
AquaSalTimer::Start()&lt;br /&gt;
&lt;br /&gt;
AquaSalTimer::Stop()&lt;br /&gt;
&lt;br /&gt;
AquaSalTimer::Restart()&lt;br /&gt;
&lt;br /&gt;
AquaSalTimer::Installtask()   // yet needed ?&lt;br /&gt;
&lt;br /&gt;
=== Sal GDI (everything Graphical Display Interface) ===&lt;br /&gt;
&lt;br /&gt;
====salgdinativewidgets====&lt;br /&gt;
&lt;br /&gt;
[[native controls]]&lt;br /&gt;
&lt;br /&gt;
==== salatslayout ====&lt;br /&gt;
&lt;br /&gt;
==&amp;gt; implemented in vcl/aqua/source/gdi/salatslayout.cxx&lt;br /&gt;
&lt;br /&gt;
- Handle text layouting :&lt;br /&gt;
&lt;br /&gt;
    * Use ATSUI (ATSUCreateTextLayoutFromPtr) to layout the text unicode char buffer&lt;br /&gt;
    * Use ATSUI (ATSU..) to get informations about glyphs&lt;br /&gt;
    * Populate different arrays (mpGlyph2Chars, mpChars2Glyph, mpCharsWidths, mpGlyphAdvances)&lt;br /&gt;
      that are used in various methods.&lt;br /&gt;
&lt;br /&gt;
==== salatsuiutils ====&lt;br /&gt;
&lt;br /&gt;
==== salfontutils ====&lt;br /&gt;
&lt;br /&gt;
==== salmathutils ====&lt;br /&gt;
&lt;br /&gt;
==== sal bmp ====&lt;br /&gt;
&lt;br /&gt;
==== salvd ====&lt;br /&gt;
&lt;br /&gt;
==== salpixmaputils====&lt;br /&gt;
&lt;br /&gt;
==== salprn ====&lt;br /&gt;
&lt;br /&gt;
====salrectangle====&lt;br /&gt;
&lt;br /&gt;
==== salvd ====&lt;br /&gt;
&lt;br /&gt;
=== Sal Window===&lt;br /&gt;
&lt;br /&gt;
==== salframe ====&lt;br /&gt;
Documentation in progress, from damiend :&lt;br /&gt;
[[User:Damiend|Damiend page]]&lt;br /&gt;
&lt;br /&gt;
====salobj====&lt;br /&gt;
&lt;br /&gt;
== TO BE IMPLEMENTED (missing in Aqua)==&lt;br /&gt;
&lt;br /&gt;
===Audio===&lt;br /&gt;
&lt;br /&gt;
====audioconvert====&lt;br /&gt;
 (obsolete?) &lt;br /&gt;
&lt;br /&gt;
====devaudio====&lt;br /&gt;
(obsolete?)&lt;br /&gt;
&lt;br /&gt;
====native sound====&lt;br /&gt;
&lt;br /&gt;
====salimpsound====&lt;br /&gt;
&lt;br /&gt;
====vsound====&lt;br /&gt;
&lt;br /&gt;
===i18n===&lt;br /&gt;
&lt;br /&gt;
===keysymnames===&lt;br /&gt;
&lt;br /&gt;
===saldisp===&lt;br /&gt;
&lt;br /&gt;
===sm===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[FIXME]: is session manager usefull?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Native Controls&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
====Scrollbar====&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Works as expected&amp;#039;&amp;#039;&amp;#039;. The most important work is done&lt;br /&gt;
&lt;br /&gt;
See : [[Mac_OS_X_Porting_-_Native_Controls#ScrollBar]]&lt;br /&gt;
&lt;br /&gt;
====DrawThemeButton() documentation====&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Started&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
See : [[Mac_OS_X_Porting_-_Native_Controls#ComboBox]]&lt;br /&gt;
&lt;br /&gt;
Started&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DrawThemeButton&lt;br /&gt;
Draws a button.&lt;br /&gt;
&lt;br /&gt;
OSStatus DrawThemeButton (&lt;br /&gt;
   const Rect * inBounds,&lt;br /&gt;
   ThemeButtonKind inKind,&lt;br /&gt;
   const ThemeButtonDrawInfo * inNewInfo,&lt;br /&gt;
   const ThemeButtonDrawInfo * inPrevInfo,&lt;br /&gt;
   ThemeEraseUPP inEraseProc,&lt;br /&gt;
   ThemeButtonDrawUPP inLabelProc,&lt;br /&gt;
   UInt32 inUserData&lt;br /&gt;
);&lt;br /&gt;
Parameters&lt;br /&gt;
inBounds&lt;br /&gt;
A pointer to a structure of type Rect. Pass a rectangle specifying the boundary of the button, in local coordinates.&lt;br /&gt;
&lt;br /&gt;
inKind&lt;br /&gt;
A value of type ThemeButtonKind. Pass a constant specifying the type of button to draw. &lt;br /&gt;
See “Theme Buttons” for descriptions of possible values.&lt;br /&gt;
&lt;br /&gt;
inNewInfo&lt;br /&gt;
A pointer to a structure of type ThemeButtonDrawInfo. Before calling DrawThemeButton, &lt;br /&gt;
set the structure to contain the new state, value, and adornment for the button. &lt;br /&gt;
DrawThemeButton uses the information passed in the inNewInfo and inPrevInfo parameters&lt;br /&gt;
to apply transitional animation or sound effects as the button state changes, if such are &lt;br /&gt;
specified under the current theme.&lt;br /&gt;
&lt;br /&gt;
inPrevInfo&lt;br /&gt;
A pointer to a structure of type ThemeButtonDrawInfo. If the button state is changing,&lt;br /&gt;
set the structure to contain the previous state, value, and adornment for the button, &lt;br /&gt;
to allow DrawThemeButton to apply any transitional effects. If the button state is not &lt;br /&gt;
changing, you can pass NULL.&lt;br /&gt;
&lt;br /&gt;
inEraseProc&lt;br /&gt;
A value of type ThemeEraseUPP. If you have a custom background, use this parameter to pass&lt;br /&gt;
a universal function pointer to an application-defined function such as that described in &lt;br /&gt;
ThemeEraseProcPtr. DrawThemeButton calls this function to erase the background before drawing&lt;br /&gt;
 the button. If you pass NULL, DrawThemeButton&amp;#039;s default behavior is to erase the background&lt;br /&gt;
 for you.&lt;br /&gt;
&lt;br /&gt;
inLabelProc&lt;br /&gt;
A value of type ThemeButtonDrawUPP. If you pass a universal function pointer to an &lt;br /&gt;
application-defined function such as that described in ThemeButtonDrawProcPtr, DrawThemeButton&lt;br /&gt;
 calls that function to draw the label of the button. If you pass NULL, no label is drawn.&lt;br /&gt;
&lt;br /&gt;
inUserData&lt;br /&gt;
An unsigned 32-bit integer. Provide any data to be passed in to the callback functions specified in &lt;br /&gt;
the inLabelProc and inEraseProc parameters. Pass NULL if you do not wish to provide any data.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
A result code. See “Appearance Manager Result Codes”.&lt;br /&gt;
&lt;br /&gt;
Discussion&lt;br /&gt;
The DrawThemeButton function draws a theme-compliant button. If a ThemeEraseProcPtr is &lt;br /&gt;
specified in the inEraseProc parameter, DrawThemeButton uses that function to erase the &lt;br /&gt;
background of the button before drawing the button. After the button is drawn, if a&lt;br /&gt;
ThemeButtonDrawProcPtr is specified in the inLabelProc parameter, DrawThemeButton calls&lt;br /&gt;
that function to draw the button’s label.&lt;br /&gt;
&lt;br /&gt;
Note that DrawThemeButton also draws any appearance adornments for the button and that these&lt;br /&gt;
can extend beyond the button’s basic bounding rectangle, as specified in the inBounds parameter,&lt;br /&gt;
and may be of variable shape. You may therefore wish to call the function&lt;br /&gt;
GetThemeButtonBackgroundBounds to obtain the actual rectangle containing the pixels belonging&lt;br /&gt;
to a button under the current theme.&lt;br /&gt;
&lt;br /&gt;
Version Notes&lt;br /&gt;
This function is available with Appearance Manager 1.1 and later.&lt;br /&gt;
&lt;br /&gt;
Availability&lt;br /&gt;
Available in CarbonLib 1.0 and later when Appearance 1.1 or later is present.&lt;br /&gt;
Available in Mac OS X 10.0 and later.&lt;br /&gt;
Declared In&lt;br /&gt;
Appearance.h&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====HIComboBoxCreate() documentation====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HIComboBoxCreate&lt;br /&gt;
Creates a combo box control.&lt;br /&gt;
&lt;br /&gt;
OSStatus HIComboBoxCreate (&lt;br /&gt;
   const HIRect* boundsRect,&lt;br /&gt;
   CFStringRef text,&lt;br /&gt;
   const ControlFontStyleRec* style,&lt;br /&gt;
   CFArrayRef list,&lt;br /&gt;
   OptionBits inAttributes,&lt;br /&gt;
   HIViewRef* outComboBox&lt;br /&gt;
);&lt;br /&gt;
Parameters&lt;br /&gt;
boundsRect&lt;br /&gt;
The bounding box of the control.&lt;br /&gt;
&lt;br /&gt;
text&lt;br /&gt;
The default text in the editable portion of the control. Can be NULL.&lt;br /&gt;
&lt;br /&gt;
style&lt;br /&gt;
The font style of the both editable text and the text in the disclosure list. Can be NULL.&lt;br /&gt;
&lt;br /&gt;
list&lt;br /&gt;
The default values available in the disclosure list. Can be NULL.&lt;br /&gt;
&lt;br /&gt;
inAttributes&lt;br /&gt;
The default attributes of the combo box. For possible values, see “Combo Box Attributes”.&lt;br /&gt;
&lt;br /&gt;
outComboBox&lt;br /&gt;
On exit, a pointer to a reference for the new control.&lt;br /&gt;
&lt;br /&gt;
Discussion&lt;br /&gt;
The combo box can be used in compositing mode, as well as traditional Control Manager mode.&lt;br /&gt;
When created, this view is invisible. To see the view, you must show the view by calling HIViewSetVisible.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== What is used for Linux, Windows, Mac OS X ...build ? ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[Description of the dependencies]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[Windows]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[MacOS X]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[Linux]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[Solaris]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Content of Aqua ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[Click here to see the complete list]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Content of vcl/inc&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Notes: &lt;br /&gt;
&lt;br /&gt;
1) Where to find includes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;foo/bar.hxx&amp;gt; means you can find bar.hxx in the foo module. The new style file is foo/inc/foo/bar.hxx, old style is foo/inc/bar.hxx and sometimes the file is somewhere else in the tree or generated. The deliver process copies/generates the file into solver at solver/680/build_type/inc/foo. Good for fixing broken builds. ;-)&lt;br /&gt;
&lt;br /&gt;
2) &lt;br /&gt;
suffix .h (for C calls or first version?) or .hxx (C++) &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;A) Family of includes&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
Looking more closely at the list brings to the fore (expression from dictionary ;-) ) that include names are&lt;br /&gt;
informatives. Most of the time, the name gives the function/role.&lt;br /&gt;
What is interesting is the files with name begining with &amp;quot;sal&amp;quot;. sal means System Abstraction Layer + include&amp;#039;s function (or explicit name). &lt;br /&gt;
&lt;br /&gt;
Partial list, for example:&lt;br /&gt;
&lt;br /&gt;
salatype.hxx&lt;br /&gt;
&lt;br /&gt;
salbmp.hxx&lt;br /&gt;
&lt;br /&gt;
salctrlhandle.hxx&lt;br /&gt;
&lt;br /&gt;
salctype.hxx&lt;br /&gt;
&lt;br /&gt;
salframe.hxx&lt;br /&gt;
&lt;br /&gt;
salgdi.hxx&lt;br /&gt;
&lt;br /&gt;
salgeom.hxx&lt;br /&gt;
&lt;br /&gt;
sallayout.hxx (main header for fonts services)&lt;br /&gt;
...&lt;br /&gt;
salmenu&lt;br /&gt;
salnativewidgets&lt;br /&gt;
...etc&lt;br /&gt;
&lt;br /&gt;
Other important families are &amp;quot;sv&amp;quot; and &amp;quot;uno&amp;quot; or &amp;quot;win&amp;quot; (window) prefixed. sal family will be analysed apart.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;B) Includes of includes&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Some includes are more important than other. To prove this, just have a look is sufficient: some are always needed, and some more rarely.&lt;br /&gt;
&lt;br /&gt;
To verify, a simple test to do in vcl/inc:&lt;br /&gt;
&lt;br /&gt;
egrep -H &amp;quot;#include&amp;quot; ./* | wc -l  gives me 681 lines ! And some of them are the same...&lt;br /&gt;
&lt;br /&gt;
To know more, the precedent command line can be modified to make appear the numerous call &lt;br /&gt;
to the same includes files.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
egrep -H &amp;quot;#include&amp;quot; ./* | cut -d&amp;quot;#&amp;quot; -f2 | sort &amp;gt; liste.txt&lt;br /&gt;
&lt;br /&gt;
The content of liste.txt is explicit: dllapi.h, sv.h and some other are very important, while some other includes are only one or two times used. We can see too that vos includes are numerous, even if vos is deprecated**&lt;br /&gt;
&lt;br /&gt;
 **see http://wiki.services.openoffice.org/wiki/Source_code_directories&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I&amp;#039;m nearly sure that a complete analysis of just this result will give us a lot of information.&lt;br /&gt;
&lt;br /&gt;
I propose to change the order of analysis starting with dllapi.h and sv.h.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[to be continued]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;B1) &amp;quot;sal&amp;quot; includes family&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
[[salinst.hxx]] This seems to be the main include file&lt;br /&gt;
&lt;br /&gt;
[[salatype.hxx]]&lt;br /&gt;
&lt;br /&gt;
[[salctrlhandle.hxx]]&lt;br /&gt;
&lt;br /&gt;
[[salctype.hxx]]&lt;br /&gt;
&lt;br /&gt;
[[salframe.hxx]]&lt;br /&gt;
&lt;br /&gt;
[[salgdi.hxx]]&lt;br /&gt;
&lt;br /&gt;
[[salgeom.hxx]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[ sallayout.hxx ]]&amp;#039;&amp;#039;&amp;#039; &amp;lt;-- see Native Fonts implementation&lt;br /&gt;
&lt;br /&gt;
[[salgtype.hxx]]&lt;br /&gt;
&lt;br /&gt;
[[vcl/inc/salobj.hxx]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;B2) Classicals includes&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
file: abstdlg.hxx [ means abstract dialog ]&lt;br /&gt;
&lt;br /&gt;
This includes does contain the following classes definitions:&lt;br /&gt;
&lt;br /&gt;
[FIXME] : choose a precise presentation template for classes &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
VclAbstractDialog,&lt;br /&gt;
&lt;br /&gt;
VclAbstractTerminateDialog, &lt;br /&gt;
&lt;br /&gt;
VclAbstractRefreshableDialog,&lt;br /&gt;
 &lt;br /&gt;
VclAbstractDialogFactory, &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
uses &amp;lt;tools/solar.h&amp;gt; , &amp;lt;tools/string.hxx&amp;gt; + &lt;br /&gt;
&lt;br /&gt;
&amp;quot;dllapi.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Note : dllapi.h is very interesting because when we have to find (for example) a library suffix, SAL_DLLEXTENSSION can replace all suffixes (every OS&amp;#039;s and archs). Just including sal/config.h does it ! &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Classes:&lt;br /&gt;
&lt;br /&gt;
Window -&amp;gt; what? [FIXME]&lt;br /&gt;
ResId -&amp;gt; what?&lt;br /&gt;
&lt;br /&gt;
Does contain the prototype of VclAbstractDialog, inherit of VCL_DLLPUBLIC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
file: dllapi.h [ dll for dynamic linked library ]&lt;br /&gt;
Uses: &amp;lt;sal/config.h&amp;gt; and &amp;gt;sal/types/h&amp;gt;&lt;br /&gt;
includes: VCL_DLLPUBLIC macro&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
file: accel.h [ means accelerator ]&lt;br /&gt;
&lt;br /&gt;
Classes:&lt;br /&gt;
&lt;br /&gt;
Accelerator &lt;br /&gt;
{&lt;br /&gt;
}&lt;br /&gt;
ImplAccelEntry &lt;br /&gt;
{&lt;br /&gt;
public members: &lt;br /&gt;
&lt;br /&gt;
Names&lt;br /&gt;
&lt;br /&gt;
mnId&lt;br /&gt;
maKeyCode&lt;br /&gt;
mpAccel&lt;br /&gt;
mpAutoAccel&lt;br /&gt;
mbEnabled&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function / returns / parameters&lt;br /&gt;
&lt;br /&gt;
ImplGetKeyCode / void / KeyFuncType eFunc, ref rCode1 , ref rCode2, ref rCode3&lt;br /&gt;
&lt;br /&gt;
file: accel.hxx &lt;br /&gt;
&lt;br /&gt;
Uses: &amp;lt;sv.h&amp;gt; , &amp;quot;dllapi.h&amp;quot; ,&amp;lt;tools/resid.hxx&amp;gt;, &amp;lt;&amp;lt;tools/rc.hxx&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Classes:&lt;br /&gt;
&lt;br /&gt;
ImplAccelData;&lt;br /&gt;
ImplAccelEntry;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Important Links ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[Progressive implementation]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Native Font server Implementation&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;[[Mac OS X Porting - Native Fonts]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Native Sound Implementation&amp;#039;&amp;#039;&amp;#039;: [[Mac OS X Porting - Native Audio and Video]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Native Printing Implementation&amp;#039;&amp;#039;&amp;#039;: [[Mac OS X Porting - Native_Printing]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Drag and Drop implementation&amp;#039;&amp;#039;&amp;#039;: [[Mac OS X Porting - Native Drag and drop]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Data Acquisition&amp;#039;&amp;#039;&amp;#039; : [[Mac OS X Porting - Data Acquisition]]&lt;br /&gt;
&lt;br /&gt;
This work is part of http://wiki.services.openoffice.org/wiki/Mac_OS_X_Porting_-_Work_Areas/Todo%27s&lt;br /&gt;
&lt;br /&gt;
[to be continued:-) ]&lt;br /&gt;
&lt;br /&gt;
== Keyboard comparizon between OpenOffice.org / Mac OS X  application ==&lt;br /&gt;
&lt;br /&gt;
[FIXME] redo a cleanest array &lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;vertical-align:top; text-align:centered; background-color:#F0F0F0;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#99CCFF; font-weight:bold;&amp;quot; &lt;br /&gt;
| Modifier||+ key  || Result || TextEdit  returns&lt;br /&gt;
|-&lt;br /&gt;
|ALT|| a||æ ||æ &lt;br /&gt;
|-&lt;br /&gt;
|ALT||b||ß ||ß&lt;br /&gt;
|-&lt;br /&gt;
|ALT||c||© ||©&lt;br /&gt;
|-&lt;br /&gt;
|ALT||d||∂ ||∂&lt;br /&gt;
|-&lt;br /&gt;
|ALT||e||ê ||ê&lt;br /&gt;
|-&lt;br /&gt;
|ALT||f||ƒ ||ƒ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||g ||ﬁ ||ﬁ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||h ||Ì ||Ì&lt;br /&gt;
|-&lt;br /&gt;
|ALT||i ||î ||î&lt;br /&gt;
|-&lt;br /&gt;
|ALT||j ||Ï ||Ï&lt;br /&gt;
|-&lt;br /&gt;
|ALT||k ||È ||È&lt;br /&gt;
|-&lt;br /&gt;
|ALT||l ||¬ ||¬&lt;br /&gt;
|-&lt;br /&gt;
|ALT||m ||µ ||µ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||n ||~ ||~&lt;br /&gt;
|-&lt;br /&gt;
|ALT||o ||œ ||œ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||p ||π ||π&lt;br /&gt;
|-&lt;br /&gt;
|ALT||q ||‡ ||‡&lt;br /&gt;
|-&lt;br /&gt;
|ALT||r ||® ||®&lt;br /&gt;
|-&lt;br /&gt;
|ALT||s ||Ò ||Ò&lt;br /&gt;
|-&lt;br /&gt;
|ALT||t ||† ||†&lt;br /&gt;
|-&lt;br /&gt;
|ALT||u ||º ||º&lt;br /&gt;
|-&lt;br /&gt;
|ALT||v ||◊ ||◊&lt;br /&gt;
|-&lt;br /&gt;
|ALT||w ||‹ ||‹&lt;br /&gt;
|-&lt;br /&gt;
|ALT||x ||≈ ||≈&lt;br /&gt;
|-&lt;br /&gt;
|ALT||y ||Ú ||Ú&lt;br /&gt;
|-&lt;br /&gt;
|ALT||z ||Â ||Â&lt;br /&gt;
|-&lt;br /&gt;
|ALT||A ||Æ ||Æ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||B ||∫ ||∫&lt;br /&gt;
|-&lt;br /&gt;
|ALT||C ||¢ ||¢&lt;br /&gt;
|-&lt;br /&gt;
|ALT||D||∆||∆&lt;br /&gt;
|-&lt;br /&gt;
|ALT||F ||· ||·&lt;br /&gt;
|-&lt;br /&gt;
|ALT||G ||ﬂ ||ﬂ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||H ||Î ||Î&lt;br /&gt;
|-&lt;br /&gt;
|ALT||I ||Î ||Î&lt;br /&gt;
|-&lt;br /&gt;
|ALT||J ||Í ||Í&lt;br /&gt;
|-&lt;br /&gt;
|ALT||K ||Ë ||Ë&lt;br /&gt;
|-&lt;br /&gt;
|ALT||L || &amp;lt;pre&amp;gt;|&amp;lt;/pre&amp;gt; ||&amp;lt;pre&amp;gt;|&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|ALT||M ||Ó ||Ó&lt;br /&gt;
|-&lt;br /&gt;
|ALT||N ||ı ||ı&lt;br /&gt;
|-&lt;br /&gt;
|ALT||O ||Œ ||Œ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||P ||∏ ||∏&lt;br /&gt;
|-&lt;br /&gt;
|ALT||Q ||Ω ||Ω&lt;br /&gt;
|-&lt;br /&gt;
|ALT||R ||‚ ||‚&lt;br /&gt;
|-&lt;br /&gt;
|ALT||S ||∑ ||∑&lt;br /&gt;
|-&lt;br /&gt;
|ALT||T ||™ ||™&lt;br /&gt;
|-&lt;br /&gt;
|ALT||U ||ª ||ª&lt;br /&gt;
|-&lt;br /&gt;
|ALT||V ||√ ||√&lt;br /&gt;
|-&lt;br /&gt;
|ALT||W ||› ||›&lt;br /&gt;
|-&lt;br /&gt;
|ALT||X ||⁄ ||⁄&lt;br /&gt;
|-&lt;br /&gt;
|ALT||Y ||Ÿ ||Ÿ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||Z ||Å ||Å&lt;br /&gt;
|-&lt;br /&gt;
|ALT||$ ||€ ||€&lt;br /&gt;
|-&lt;br /&gt;
|ALT||` ||@ ||@&lt;br /&gt;
|-&lt;br /&gt;
|ALT||£ ||# ||#&lt;br /&gt;
|-&lt;br /&gt;
|ALT||* ||¥ ||¥&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Sous réserve d&amp;#039;erreur ou omission [[User:Ericb|Ericb]] 00:05, 14 January 2007 (CET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[User:Ericb|Ericb]] 15:00, 22 Jul 2005 (EDT)&lt;br /&gt;
&lt;br /&gt;
[[Category:Porting]]&lt;br /&gt;
[[Category:MacOSX]]&lt;br /&gt;
[[Category:Aqua]]&lt;/div&gt;</summary>
		<author><name>Plipli</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=User:PliPli&amp;diff=31774</id>
		<title>User:PliPli</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=User:PliPli&amp;diff=31774"/>
		<updated>2007-05-08T10:09:58Z</updated>

		<summary type="html">&lt;p&gt;Plipli: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Developer Infos ==&lt;br /&gt;
&lt;br /&gt;
Name: Sebastien PLISSON&lt;br /&gt;
&lt;br /&gt;
IRC Nickname: plipli&lt;br /&gt;
&lt;br /&gt;
blog: [http://splisson.blogspot.com splisson at OOo]&lt;/div&gt;</summary>
		<author><name>Plipli</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=User:Ismael&amp;diff=31773</id>
		<title>User:Ismael</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=User:Ismael&amp;diff=31773"/>
		<updated>2007-05-08T10:08:29Z</updated>

		<summary type="html">&lt;p&gt;Plipli: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Developper infos ==&lt;br /&gt;
&lt;br /&gt;
Name: Ismael MERZAQ&lt;br /&gt;
&lt;br /&gt;
IRC Nickname: Ismael_&lt;br /&gt;
&lt;br /&gt;
blog: [http://lebasket.free.fr/blog http://lebasket.free.fr/blog]&lt;br /&gt;
&lt;br /&gt;
== Current work  ==&lt;br /&gt;
&lt;br /&gt;
I have implemented key accelerators in native menus (like Cmd+N for new document instead of ctrl+N in the X11 version). This was my first contribution to native port and also to OOo.&lt;br /&gt;
I also worked on graphics for the native port: i have corrected a bug on image mask to have correct images in the menu, I implemented functions in AquaSalGraphic too (drawAlphaImage() for example).&lt;br /&gt;
After graphic functions, i worked on improving native windows and dialogs, and implementing missing functions of salframe.cxx (in vcl/aqua/source/window).&lt;br /&gt;
&lt;br /&gt;
I will also continue the implementation of native controls for the Google Summer of Code 2007.&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The purpose of this page is to be a place for documentations on my work to help people who would continue my work or use it, or simply want to understand what i do. &lt;br /&gt;
And, moreover, writing documentation is an important part of coding.&lt;br /&gt;
&lt;br /&gt;
== Apple Documentation and References ==&lt;br /&gt;
&lt;br /&gt;
Apple Carbon/Quartz reference &lt;br /&gt;
*about menus:  [http://developer.apple.com/documentation/Carbon/Reference/Menu_Manager/index.html]&lt;br /&gt;
*about images (CGImage): [http://developer.apple.com/documentation/GraphicsImaging/Reference/CGImage/index.html]&lt;br /&gt;
*about graphic contexts (CGContexts): [http://developer.apple.com/documentation/GraphicsImaging/Reference/CGContext/index.html]&lt;br /&gt;
&lt;br /&gt;
== Native windows ==&lt;br /&gt;
&lt;br /&gt;
see [[Mac_OS_X_Porting_salframe]]&lt;br /&gt;
&lt;br /&gt;
== Image masks ==&lt;br /&gt;
&lt;br /&gt;
=== Short intro ===&lt;br /&gt;
&lt;br /&gt;
As i explained it on my blog, i have continued the work Pavel Janick did on image masks. At the beginning, my work was to correct a bug concerning images in menus. I firstly thought i would have to concentrate on AquaSalMenu::SetItemImage but the problem wasn&amp;#039;t on this function. So my work mainly concerned AquaSalBitmap::CreateMask and AquaSalBitmap::CreateWithMask functions (both located in vcl/aqua/source/gdi/salbmp.cxx). The problem came from the CreateMask function which didn&amp;#039;t work as expected. Indeed, it created a mask with random values and so images in the menus had some pixels transparent and some others not, making the image not looking as it should.&lt;br /&gt;
[[Image:AquaImageMenuBug.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In the CreateMask function, the image mask is created from a RawMemorySharedArray (defined in the basebmp namespace, see in bitmapdevice.hxx. The RawMemorySharedArray uses the boost library (typedef boost::shared_array&amp;lt; sal_uInt8 &amp;gt; RawMemorySharedArray;)). Depending on the number of bits per component (colors+alpha), pixels have different values which are added to a RawMemorySharedArray. Then a CGDataprovider is created with the data of the RawMemorySharedArray (CGDataProviderRef xDataProvider( CGDataProviderCreateWithData(NULL, aMaskBuffer.get(), nHeight * nWidth, NULL) ); where aMaskBuffer is defined as basebmp::RawMemorySharedArray aMaskBuffer( new sal_uInt8[ nWidth * nHeight ] );). And finally, the image mask is created from this CGDataProvider (xMask = CGImageMaskCreate(nWidth, nHeight, 8, 8, nWidth, xDataProvider, NULL, true );).&lt;br /&gt;
&lt;br /&gt;
[[Image:imageAndMasks.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Image and its mask (seen in Icon Composer)&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
=== The possible causes of the bug ===&lt;br /&gt;
&lt;br /&gt;
So the problem may come from the RawMemorySharedArray, it may also come from the creation of the CGDataProvider from it, or from the creation of the imagemask from the cgdataprovider. What is sure is that the problem comes from the CreateMask function in salbmp.cxx, but i haven&amp;#039;t been able to fix it. So i decided to do it by another way.&lt;br /&gt;
&lt;br /&gt;
=== So, how did i do? ===&lt;br /&gt;
&lt;br /&gt;
Instead of creating an image mask from the alpha of the original image, i created a CGImage from the alpha mask (passed as argument of the function as an AquaSalBitmap&amp;amp;), and i masked the original image with it, using context. &lt;br /&gt;
&lt;br /&gt;
Here&amp;#039;s the part of code which masks the image:           &lt;br /&gt;
&amp;lt;pre&amp;gt;CGContextSaveGState(mxGraphicContext);&lt;br /&gt;
            &lt;br /&gt;
CGContextBeginTransparencyLayer(mxGraphicContext, NULL);&lt;br /&gt;
CGContextClipToMask(mxGraphicContext, CGRectMake( nX, nY, nDX, nDY), xMask);&lt;br /&gt;
CGContextDrawImage(mxGraphicContext, CGRectMake( nX, nY, nDX, nDY), xImage );&lt;br /&gt;
xMaskedImage=CGBitmapContextCreateImage(mxGraphicContext);&lt;br /&gt;
CGContextEndTransparencyLayer(mxGraphicContext);&lt;br /&gt;
            &lt;br /&gt;
CGContextRestoreGState(mxGraphicContext);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
We firstly save the context. Then we call CGContextBeginTransparencyLayer(mxGraphicContext, NULL) to have transparency else the transparent regions are black. Then we use the function CGContextClipToMask(mxGraphicContext, CGRectMake( nX, nY, nDX, nDY), xMask). Here&amp;#039;s what the [http://developer.apple.com/documentation/GraphicsImaging/Reference/CGContext/Reference/reference.html#//apple_ref/c/func/CGContextClipToMask AppleDoc] says about it:&lt;br /&gt;
&amp;lt;pre&amp;gt;CGContextClipToMask&lt;br /&gt;
Maps a mask into the specified rectangle and intersects it with the current clipping&lt;br /&gt;
area of the graphics context.&lt;br /&gt;
&lt;br /&gt;
void CGContextClipToMask(&lt;br /&gt;
CGContextRef c, &lt;br /&gt;
CGRect rect, &lt;br /&gt;
CGImageRef mask&lt;br /&gt;
);&lt;br /&gt;
[...]&lt;br /&gt;
mask&lt;br /&gt;
An image or an image mask.&lt;br /&gt;
[...]&lt;br /&gt;
Discussion&lt;br /&gt;
If the mask parameter is an image mask, then Quartz clips in a manner identical to the &lt;br /&gt;
behavior seen with the function CGContextDrawImage—the mask indicates an area to be left&lt;br /&gt;
unchanged when drawing. The source samples of the image mask determine which points of &lt;br /&gt;
the clipping area are changed, acting as an &amp;quot;inverse alpha&amp;quot; value. If the value of a source&lt;br /&gt;
sample in the image mask is S, then the corresponding point in the current clipping area is&lt;br /&gt;
multiplied by an alpha value of (1–S). For example, if S is 1 then the point in the clipping&lt;br /&gt;
area becomes transparent. If S is 0, the point in the clipping area is unchanged.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then we draw the image on the context (which has been masked) with CGContextDrawImage(mxGraphicContext, CGRectMake( nX, nY, nDX, nDY), xImage ). And we create the CGImage from this context with xMaskedImage=CGBitmapContextCreateImage(mxGraphicContext). Finally we restore the context (CGContextRestoreGState(mxGraphicContext);)&lt;br /&gt;
&lt;br /&gt;
But this is not enough. Indeed, in the function CGContextClipToMask, the mask is a CGImage not the AquaSalBitmap of the arguments (CGImageRef AquaSalBitmap::CreateWithMask( const AquaSalBitmap&amp;amp; rMask, sal_uInt32 nX, sal_uInt32 nY, sal_uInt32 nDX, sal_uInt32 nDY )). So we have to transform the AquaSalBitmap rMask in CGImage. This is done thanks to the CreateCroppedImage  function (CGImageRef AquaSalBitmap::CreateCroppedImage( int nX, int nY, int nWidth, int nHeight);) But the AquaSalBitmap rMask can&amp;#039;t be a const, so we have 2 possibilities: remove the const in the declaration of the function, or copy the aquasalbitmap. The first solution can&amp;#039;t be used because salgdi.cxx and other files need to have it defined with the const mask. So i used the second solution: copying the AquaSalBitmap (rMaskNew.Create( rMask ) creates a copy of rMask).&lt;br /&gt;
&lt;br /&gt;
But there was still a problem.&lt;br /&gt;
The image mask should be inverted, i.e. the black pixels should become white and the white pixels should become black.&lt;br /&gt;
&lt;br /&gt;
[[Image:AquaMenuImagesWithNotInvertedMask.jpg]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Without inverting the mask, the parts which should be painted are transparent and those which should be transparent are painted.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
So i looked for a function to do that in the OOo API. The AquaSalGraphics class provide one but it is not yet implemented. And as its implementation is, in my opinion, difficult and need some time, i didn&amp;#039;t implement it yet and so I inverted the image mask using contexts in the function which need it. Instead of inverting the AquaSalBitmap with the OOo API, i inverted the CGImage with the Quartz API. But this solution should stay a temporary solution and, in my opinion, should be replaced as soon as possible by the one using OOo API, mainly for the clarity of code.&lt;br /&gt;
Here&amp;#039;s the code which invert the image thanks to context:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rMaskNew.CreateContext();&lt;br /&gt;
CGContextTranslateCTM (rMaskNew.mxGraphicContext, 0, mnHeight);&lt;br /&gt;
CGContextScaleCTM (rMaskNew.mxGraphicContext, 1.0, -1.0);&lt;br /&gt;
CGContextSetGrayFillColor(rMaskNew.mxGraphicContext, 1.0, 1.0);&lt;br /&gt;
CGContextFillRect(rMaskNew.mxGraphicContext, CGRectMake( nX, nY, nDX, nDY));&lt;br /&gt;
CGContextSetBlendMode(rMaskNew.mxGraphicContext,  kCGBlendModeDifference);&lt;br /&gt;
CGContextDrawImage(rMaskNew.mxGraphicContext, CGRectMake( nX, nY, nDX, nDY), xMask);&lt;br /&gt;
xMask=CGBitmapContextCreateImage(rMaskNew.mxGraphicContext);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Key accelerators ==&lt;br /&gt;
&lt;br /&gt;
=== Short introduction: presenting the basis ===&lt;br /&gt;
&lt;br /&gt;
The function which interests us is &amp;lt;pre&amp;gt;void AquaSalMenu::SetAccelerator( unsigned nPos, SalMenuItem* pSalMenuItem, const KeyCode&amp;amp; rKeyCode, const XubString&amp;amp; rKeyName ) &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* nPos is the menu item index, but nPos is 0 to n based whereas the carbon API we use for ooo macport is from 1 to n+1 e.g. for the first element nPos=0, and his carbon index will be 1 &lt;br /&gt;
&lt;br /&gt;
*SalMenuItem* pSalMenuItem is a pointer to the menu item we want to add key accelerator&lt;br /&gt;
&lt;br /&gt;
*const KeyCode&amp;amp; rKeyCode is the keycode of the accelerator. We can get the keycode with &amp;#039;&amp;#039;rKeyCode.GetCode()&amp;#039;&amp;#039; and the key modifier(s) (like cmd, shift, ... for Mac OS) with &amp;#039;&amp;#039;rKeyCode.GetAllModifier()&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
*const XubString&amp;amp; rKeyName is not used for the MacOs port&lt;br /&gt;
&lt;br /&gt;
=== Implementation ===&lt;br /&gt;
&lt;br /&gt;
We will use the &amp;#039;&amp;#039;SetMenuItemModifiers&amp;#039;&amp;#039; function to chose the modifier(s) of the key accelerator like cmd, shift, alt... and we&amp;#039;ll set the key accelerator with two different function depending of the situation: the &amp;#039;&amp;#039;SetMenuItemCommandKey&amp;#039;&amp;#039; function for visible key accelerator (like for the N of Cmd+N) and the &amp;#039;&amp;#039;SetMenuItemKeyGlyph&amp;#039;&amp;#039; function for non visible characters (like for F1, F2,... or space).&lt;br /&gt;
&lt;br /&gt;
=== Setting the key accelerator ===&lt;br /&gt;
The difficulty is that the OOo keycodes are different of the ASCII keycodes used in Carbon.&lt;br /&gt;
For example: A is 65 in ASCII but in OOo it&amp;#039;s 512 (defined in Key.hdl)&lt;br /&gt;
So we have to translate from ooo codes to ascii, but the order of the characters are not exactly the same as ASCII so we translate only by intervals. We obtain this code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if ((ncode&amp;gt;=KEY_A) &amp;amp;&amp;amp; (ncode&amp;lt;=KEY_Z)) {&lt;br /&gt;
    nresultcode=ncode-KEY_A+&amp;#039;A&amp;#039;;&lt;br /&gt;
}&lt;br /&gt;
else if ((ncode&amp;gt;=KEY_0) &amp;amp;&amp;amp; (ncode&amp;lt;=KEY_9)) {&lt;br /&gt;
    nresultcode=ncode-KEY_0+&amp;#039;0&amp;#039;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We do the same thing for non visible characters but instead of using the ascii code of the given character we use its carbon value.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
else if((ncode&amp;gt;=KEY_F1) &amp;amp;&amp;amp; (ncode&amp;lt;=KEY_F12)) {&lt;br /&gt;
    nresultcode=kMenuF1Glyph+ncode-KEY_F1; // kMenuFnGlyph=kMenuF1Glyph+n only for n&amp;lt;13 then it should be processed for each case&lt;br /&gt;
}&lt;br /&gt;
else if((ncode&amp;gt;=KEY_F13) &amp;amp;&amp;amp; (ncode&amp;lt;=KEY_F15)) {&lt;br /&gt;
    nresultcode=kMenuF13Glyph+ncode-KEY_F13; //kMenuF13Glyph=0x87 and kMenuF12Glyph=0x7A&lt;br /&gt;
}&lt;br /&gt;
else if(ncode==KEY_SPACE) {&lt;br /&gt;
    nresultcode=kMenuSpaceGlyph; &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then we only have to add the accelator to the menu: &lt;br /&gt;
*For the non visible characters: The syntax of &amp;#039;&amp;#039;SetMenuItemKeyGlyph&amp;#039;&amp;#039; is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
OSErr SetMenuItemKeyGlyph (&lt;br /&gt;
   MenuRef inMenu,&lt;br /&gt;
   SInt16 inItem,&lt;br /&gt;
   SInt16 inGlyph&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
so we use it like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SetMenuItemKeyGlyph (&lt;br /&gt;
    mrMenuRef, //is the reference to the menu&lt;br /&gt;
    nPos+1, // for the reason of using nPos+1 instead of nPos see the short intro&lt;br /&gt;
    nresultcode&lt;br /&gt;
    );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*For visible characters: The syntax of &amp;#039;&amp;#039;SetMenuItemCommandKey&amp;#039;&amp;#039; is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
OSStatus SetMenuItemCommandKey (&lt;br /&gt;
   MenuRef inMenu,&lt;br /&gt;
   MenuItemIndex inItem,&lt;br /&gt;
   Boolean inSetVirtualKey,&lt;br /&gt;
   UInt16 inKey&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
so we use it like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SetMenuItemCommandKey (&lt;br /&gt;
    mrMenuRef,&lt;br /&gt;
    nPos+1,&lt;br /&gt;
    0,&lt;br /&gt;
    nresultcode&lt;br /&gt;
    );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Key accelerators definitions in OpenOffice.org for MacOS X ===&lt;br /&gt;
&lt;br /&gt;
See [[Mac OS X Porting - Keyboard Shortcuts]].&lt;br /&gt;
&lt;br /&gt;
--[[User:Ismael|Ismael]] 16:43, 19 April 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:MacOSX]]&lt;br /&gt;
[[Category:Porting]]&lt;br /&gt;
[[Category:Aqua]]&lt;/div&gt;</summary>
		<author><name>Plipli</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=User:PliPli&amp;diff=31772</id>
		<title>User:PliPli</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=User:PliPli&amp;diff=31772"/>
		<updated>2007-05-08T10:06:05Z</updated>

		<summary type="html">&lt;p&gt;Plipli: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Developer Infos ==&lt;br /&gt;
&lt;br /&gt;
Name: Sebastien PLISSON&lt;br /&gt;
&lt;br /&gt;
IRC Nickname: plipli&lt;br /&gt;
&lt;br /&gt;
blog: [http://splisson.blogspot.com]&lt;/div&gt;</summary>
		<author><name>Plipli</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=User:Ismael&amp;diff=31771</id>
		<title>User:Ismael</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=User:Ismael&amp;diff=31771"/>
		<updated>2007-05-08T10:05:30Z</updated>

		<summary type="html">&lt;p&gt;Plipli: /* Developper infos */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Developper infos ==&lt;br /&gt;
&lt;br /&gt;
Name: Ismael MERZAQ&lt;br /&gt;
&lt;br /&gt;
IRC Nickname: Ismael_&lt;br /&gt;
&lt;br /&gt;
blog: [http://splisson.blogspot.com/]&lt;br /&gt;
&lt;br /&gt;
== Current work  ==&lt;br /&gt;
&lt;br /&gt;
I have implemented key accelerators in native menus (like Cmd+N for new document instead of ctrl+N in the X11 version). This was my first contribution to native port and also to OOo.&lt;br /&gt;
I also worked on graphics for the native port: i have corrected a bug on image mask to have correct images in the menu, I implemented functions in AquaSalGraphic too (drawAlphaImage() for example).&lt;br /&gt;
After graphic functions, i worked on improving native windows and dialogs, and implementing missing functions of salframe.cxx (in vcl/aqua/source/window).&lt;br /&gt;
&lt;br /&gt;
I will also continue the implementation of native controls for the Google Summer of Code 2007.&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The purpose of this page is to be a place for documentations on my work to help people who would continue my work or use it, or simply want to understand what i do. &lt;br /&gt;
And, moreover, writing documentation is an important part of coding.&lt;br /&gt;
&lt;br /&gt;
== Apple Documentation and References ==&lt;br /&gt;
&lt;br /&gt;
Apple Carbon/Quartz reference &lt;br /&gt;
*about menus:  [http://developer.apple.com/documentation/Carbon/Reference/Menu_Manager/index.html]&lt;br /&gt;
*about images (CGImage): [http://developer.apple.com/documentation/GraphicsImaging/Reference/CGImage/index.html]&lt;br /&gt;
*about graphic contexts (CGContexts): [http://developer.apple.com/documentation/GraphicsImaging/Reference/CGContext/index.html]&lt;br /&gt;
&lt;br /&gt;
== Native windows ==&lt;br /&gt;
&lt;br /&gt;
see [[Mac_OS_X_Porting_salframe]]&lt;br /&gt;
&lt;br /&gt;
== Image masks ==&lt;br /&gt;
&lt;br /&gt;
=== Short intro ===&lt;br /&gt;
&lt;br /&gt;
As i explained it on my blog, i have continued the work Pavel Janick did on image masks. At the beginning, my work was to correct a bug concerning images in menus. I firstly thought i would have to concentrate on AquaSalMenu::SetItemImage but the problem wasn&amp;#039;t on this function. So my work mainly concerned AquaSalBitmap::CreateMask and AquaSalBitmap::CreateWithMask functions (both located in vcl/aqua/source/gdi/salbmp.cxx). The problem came from the CreateMask function which didn&amp;#039;t work as expected. Indeed, it created a mask with random values and so images in the menus had some pixels transparent and some others not, making the image not looking as it should.&lt;br /&gt;
[[Image:AquaImageMenuBug.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In the CreateMask function, the image mask is created from a RawMemorySharedArray (defined in the basebmp namespace, see in bitmapdevice.hxx. The RawMemorySharedArray uses the boost library (typedef boost::shared_array&amp;lt; sal_uInt8 &amp;gt; RawMemorySharedArray;)). Depending on the number of bits per component (colors+alpha), pixels have different values which are added to a RawMemorySharedArray. Then a CGDataprovider is created with the data of the RawMemorySharedArray (CGDataProviderRef xDataProvider( CGDataProviderCreateWithData(NULL, aMaskBuffer.get(), nHeight * nWidth, NULL) ); where aMaskBuffer is defined as basebmp::RawMemorySharedArray aMaskBuffer( new sal_uInt8[ nWidth * nHeight ] );). And finally, the image mask is created from this CGDataProvider (xMask = CGImageMaskCreate(nWidth, nHeight, 8, 8, nWidth, xDataProvider, NULL, true );).&lt;br /&gt;
&lt;br /&gt;
[[Image:imageAndMasks.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Image and its mask (seen in Icon Composer)&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
=== The possible causes of the bug ===&lt;br /&gt;
&lt;br /&gt;
So the problem may come from the RawMemorySharedArray, it may also come from the creation of the CGDataProvider from it, or from the creation of the imagemask from the cgdataprovider. What is sure is that the problem comes from the CreateMask function in salbmp.cxx, but i haven&amp;#039;t been able to fix it. So i decided to do it by another way.&lt;br /&gt;
&lt;br /&gt;
=== So, how did i do? ===&lt;br /&gt;
&lt;br /&gt;
Instead of creating an image mask from the alpha of the original image, i created a CGImage from the alpha mask (passed as argument of the function as an AquaSalBitmap&amp;amp;), and i masked the original image with it, using context. &lt;br /&gt;
&lt;br /&gt;
Here&amp;#039;s the part of code which masks the image:           &lt;br /&gt;
&amp;lt;pre&amp;gt;CGContextSaveGState(mxGraphicContext);&lt;br /&gt;
            &lt;br /&gt;
CGContextBeginTransparencyLayer(mxGraphicContext, NULL);&lt;br /&gt;
CGContextClipToMask(mxGraphicContext, CGRectMake( nX, nY, nDX, nDY), xMask);&lt;br /&gt;
CGContextDrawImage(mxGraphicContext, CGRectMake( nX, nY, nDX, nDY), xImage );&lt;br /&gt;
xMaskedImage=CGBitmapContextCreateImage(mxGraphicContext);&lt;br /&gt;
CGContextEndTransparencyLayer(mxGraphicContext);&lt;br /&gt;
            &lt;br /&gt;
CGContextRestoreGState(mxGraphicContext);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
We firstly save the context. Then we call CGContextBeginTransparencyLayer(mxGraphicContext, NULL) to have transparency else the transparent regions are black. Then we use the function CGContextClipToMask(mxGraphicContext, CGRectMake( nX, nY, nDX, nDY), xMask). Here&amp;#039;s what the [http://developer.apple.com/documentation/GraphicsImaging/Reference/CGContext/Reference/reference.html#//apple_ref/c/func/CGContextClipToMask AppleDoc] says about it:&lt;br /&gt;
&amp;lt;pre&amp;gt;CGContextClipToMask&lt;br /&gt;
Maps a mask into the specified rectangle and intersects it with the current clipping&lt;br /&gt;
area of the graphics context.&lt;br /&gt;
&lt;br /&gt;
void CGContextClipToMask(&lt;br /&gt;
CGContextRef c, &lt;br /&gt;
CGRect rect, &lt;br /&gt;
CGImageRef mask&lt;br /&gt;
);&lt;br /&gt;
[...]&lt;br /&gt;
mask&lt;br /&gt;
An image or an image mask.&lt;br /&gt;
[...]&lt;br /&gt;
Discussion&lt;br /&gt;
If the mask parameter is an image mask, then Quartz clips in a manner identical to the &lt;br /&gt;
behavior seen with the function CGContextDrawImage—the mask indicates an area to be left&lt;br /&gt;
unchanged when drawing. The source samples of the image mask determine which points of &lt;br /&gt;
the clipping area are changed, acting as an &amp;quot;inverse alpha&amp;quot; value. If the value of a source&lt;br /&gt;
sample in the image mask is S, then the corresponding point in the current clipping area is&lt;br /&gt;
multiplied by an alpha value of (1–S). For example, if S is 1 then the point in the clipping&lt;br /&gt;
area becomes transparent. If S is 0, the point in the clipping area is unchanged.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then we draw the image on the context (which has been masked) with CGContextDrawImage(mxGraphicContext, CGRectMake( nX, nY, nDX, nDY), xImage ). And we create the CGImage from this context with xMaskedImage=CGBitmapContextCreateImage(mxGraphicContext). Finally we restore the context (CGContextRestoreGState(mxGraphicContext);)&lt;br /&gt;
&lt;br /&gt;
But this is not enough. Indeed, in the function CGContextClipToMask, the mask is a CGImage not the AquaSalBitmap of the arguments (CGImageRef AquaSalBitmap::CreateWithMask( const AquaSalBitmap&amp;amp; rMask, sal_uInt32 nX, sal_uInt32 nY, sal_uInt32 nDX, sal_uInt32 nDY )). So we have to transform the AquaSalBitmap rMask in CGImage. This is done thanks to the CreateCroppedImage  function (CGImageRef AquaSalBitmap::CreateCroppedImage( int nX, int nY, int nWidth, int nHeight);) But the AquaSalBitmap rMask can&amp;#039;t be a const, so we have 2 possibilities: remove the const in the declaration of the function, or copy the aquasalbitmap. The first solution can&amp;#039;t be used because salgdi.cxx and other files need to have it defined with the const mask. So i used the second solution: copying the AquaSalBitmap (rMaskNew.Create( rMask ) creates a copy of rMask).&lt;br /&gt;
&lt;br /&gt;
But there was still a problem.&lt;br /&gt;
The image mask should be inverted, i.e. the black pixels should become white and the white pixels should become black.&lt;br /&gt;
&lt;br /&gt;
[[Image:AquaMenuImagesWithNotInvertedMask.jpg]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Without inverting the mask, the parts which should be painted are transparent and those which should be transparent are painted.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
So i looked for a function to do that in the OOo API. The AquaSalGraphics class provide one but it is not yet implemented. And as its implementation is, in my opinion, difficult and need some time, i didn&amp;#039;t implement it yet and so I inverted the image mask using contexts in the function which need it. Instead of inverting the AquaSalBitmap with the OOo API, i inverted the CGImage with the Quartz API. But this solution should stay a temporary solution and, in my opinion, should be replaced as soon as possible by the one using OOo API, mainly for the clarity of code.&lt;br /&gt;
Here&amp;#039;s the code which invert the image thanks to context:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rMaskNew.CreateContext();&lt;br /&gt;
CGContextTranslateCTM (rMaskNew.mxGraphicContext, 0, mnHeight);&lt;br /&gt;
CGContextScaleCTM (rMaskNew.mxGraphicContext, 1.0, -1.0);&lt;br /&gt;
CGContextSetGrayFillColor(rMaskNew.mxGraphicContext, 1.0, 1.0);&lt;br /&gt;
CGContextFillRect(rMaskNew.mxGraphicContext, CGRectMake( nX, nY, nDX, nDY));&lt;br /&gt;
CGContextSetBlendMode(rMaskNew.mxGraphicContext,  kCGBlendModeDifference);&lt;br /&gt;
CGContextDrawImage(rMaskNew.mxGraphicContext, CGRectMake( nX, nY, nDX, nDY), xMask);&lt;br /&gt;
xMask=CGBitmapContextCreateImage(rMaskNew.mxGraphicContext);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Key accelerators ==&lt;br /&gt;
&lt;br /&gt;
=== Short introduction: presenting the basis ===&lt;br /&gt;
&lt;br /&gt;
The function which interests us is &amp;lt;pre&amp;gt;void AquaSalMenu::SetAccelerator( unsigned nPos, SalMenuItem* pSalMenuItem, const KeyCode&amp;amp; rKeyCode, const XubString&amp;amp; rKeyName ) &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* nPos is the menu item index, but nPos is 0 to n based whereas the carbon API we use for ooo macport is from 1 to n+1 e.g. for the first element nPos=0, and his carbon index will be 1 &lt;br /&gt;
&lt;br /&gt;
*SalMenuItem* pSalMenuItem is a pointer to the menu item we want to add key accelerator&lt;br /&gt;
&lt;br /&gt;
*const KeyCode&amp;amp; rKeyCode is the keycode of the accelerator. We can get the keycode with &amp;#039;&amp;#039;rKeyCode.GetCode()&amp;#039;&amp;#039; and the key modifier(s) (like cmd, shift, ... for Mac OS) with &amp;#039;&amp;#039;rKeyCode.GetAllModifier()&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
*const XubString&amp;amp; rKeyName is not used for the MacOs port&lt;br /&gt;
&lt;br /&gt;
=== Implementation ===&lt;br /&gt;
&lt;br /&gt;
We will use the &amp;#039;&amp;#039;SetMenuItemModifiers&amp;#039;&amp;#039; function to chose the modifier(s) of the key accelerator like cmd, shift, alt... and we&amp;#039;ll set the key accelerator with two different function depending of the situation: the &amp;#039;&amp;#039;SetMenuItemCommandKey&amp;#039;&amp;#039; function for visible key accelerator (like for the N of Cmd+N) and the &amp;#039;&amp;#039;SetMenuItemKeyGlyph&amp;#039;&amp;#039; function for non visible characters (like for F1, F2,... or space).&lt;br /&gt;
&lt;br /&gt;
=== Setting the key accelerator ===&lt;br /&gt;
The difficulty is that the OOo keycodes are different of the ASCII keycodes used in Carbon.&lt;br /&gt;
For example: A is 65 in ASCII but in OOo it&amp;#039;s 512 (defined in Key.hdl)&lt;br /&gt;
So we have to translate from ooo codes to ascii, but the order of the characters are not exactly the same as ASCII so we translate only by intervals. We obtain this code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if ((ncode&amp;gt;=KEY_A) &amp;amp;&amp;amp; (ncode&amp;lt;=KEY_Z)) {&lt;br /&gt;
    nresultcode=ncode-KEY_A+&amp;#039;A&amp;#039;;&lt;br /&gt;
}&lt;br /&gt;
else if ((ncode&amp;gt;=KEY_0) &amp;amp;&amp;amp; (ncode&amp;lt;=KEY_9)) {&lt;br /&gt;
    nresultcode=ncode-KEY_0+&amp;#039;0&amp;#039;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We do the same thing for non visible characters but instead of using the ascii code of the given character we use its carbon value.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
else if((ncode&amp;gt;=KEY_F1) &amp;amp;&amp;amp; (ncode&amp;lt;=KEY_F12)) {&lt;br /&gt;
    nresultcode=kMenuF1Glyph+ncode-KEY_F1; // kMenuFnGlyph=kMenuF1Glyph+n only for n&amp;lt;13 then it should be processed for each case&lt;br /&gt;
}&lt;br /&gt;
else if((ncode&amp;gt;=KEY_F13) &amp;amp;&amp;amp; (ncode&amp;lt;=KEY_F15)) {&lt;br /&gt;
    nresultcode=kMenuF13Glyph+ncode-KEY_F13; //kMenuF13Glyph=0x87 and kMenuF12Glyph=0x7A&lt;br /&gt;
}&lt;br /&gt;
else if(ncode==KEY_SPACE) {&lt;br /&gt;
    nresultcode=kMenuSpaceGlyph; &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then we only have to add the accelator to the menu: &lt;br /&gt;
*For the non visible characters: The syntax of &amp;#039;&amp;#039;SetMenuItemKeyGlyph&amp;#039;&amp;#039; is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
OSErr SetMenuItemKeyGlyph (&lt;br /&gt;
   MenuRef inMenu,&lt;br /&gt;
   SInt16 inItem,&lt;br /&gt;
   SInt16 inGlyph&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
so we use it like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SetMenuItemKeyGlyph (&lt;br /&gt;
    mrMenuRef, //is the reference to the menu&lt;br /&gt;
    nPos+1, // for the reason of using nPos+1 instead of nPos see the short intro&lt;br /&gt;
    nresultcode&lt;br /&gt;
    );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*For visible characters: The syntax of &amp;#039;&amp;#039;SetMenuItemCommandKey&amp;#039;&amp;#039; is:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
OSStatus SetMenuItemCommandKey (&lt;br /&gt;
   MenuRef inMenu,&lt;br /&gt;
   MenuItemIndex inItem,&lt;br /&gt;
   Boolean inSetVirtualKey,&lt;br /&gt;
   UInt16 inKey&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
so we use it like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SetMenuItemCommandKey (&lt;br /&gt;
    mrMenuRef,&lt;br /&gt;
    nPos+1,&lt;br /&gt;
    0,&lt;br /&gt;
    nresultcode&lt;br /&gt;
    );&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Key accelerators definitions in OpenOffice.org for MacOS X ===&lt;br /&gt;
&lt;br /&gt;
See [[Mac OS X Porting - Keyboard Shortcuts]].&lt;br /&gt;
&lt;br /&gt;
--[[User:Ismael|Ismael]] 16:43, 19 April 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:MacOSX]]&lt;br /&gt;
[[Category:Porting]]&lt;br /&gt;
[[Category:Aqua]]&lt;/div&gt;</summary>
		<author><name>Plipli</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Documentation/Building_Guide/Building_on_MacOSX&amp;diff=31770</id>
		<title>Documentation/Building Guide/Building on MacOSX</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Documentation/Building_Guide/Building_on_MacOSX&amp;diff=31770"/>
		<updated>2007-05-08T10:02:00Z</updated>

		<summary type="html">&lt;p&gt;Plipli: /* &amp;#039;&amp;#039;&amp;#039;External links&amp;#039;&amp;#039;&amp;#039; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- &lt;br /&gt;
&amp;lt;div align=&amp;quot;left&amp;quot; style=&amp;quot;color:red; font-size:20px&amp;quot;&amp;gt;&amp;#039;&amp;#039;&amp;#039;PLEASE WAIT:  RESYNC WITH  M211 IN PROGRESS&amp;#039;&amp;#039;&amp;#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;#039;&amp;#039;&amp;#039;This document tries to wrap-up the build process for [[OpenOffice.org]] on Mac OS X using the native windowing-toolkit of the platform named Aqua.&amp;#039;&amp;#039;&amp;#039; &amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To give a kickstart in the coding involved to get VCL ported to Carbon, please have a look at the excellent Pierre de Filippis [[Intro To Mac Porting]].&lt;br /&gt;
&lt;br /&gt;
We use the bash shell in all examples, since to our belief users of the C-shell are smart enough to figure out the differences anyway. If you want to dig deeper into the build process, please have a look at the description of the build environment here: [http://tools.openoffice.org/build_env.html OpenOffice.org Build Environment].&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Prerequisites&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
This document was derived from the description of the X11 build thanksworthy provided by Eric Hoch in this document: [[MacOSXBuildInstructions]].&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Here we would like to outline the things you need to build the Aqua Version&amp;#039;&amp;#039;&amp;#039; (besides the OS). &lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;div align=&amp;quot;left&amp;quot; style=&amp;quot;color:red; font-size:18px&amp;quot;&amp;gt;&amp;#039;&amp;#039;&amp;#039;Mandatory&amp;#039;&amp;#039;&amp;#039;&amp;lt;/div&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
==== Xcode ====&lt;br /&gt;
&lt;br /&gt;
This is the only mandatory part to be installed to build Aqua version of OpenOffice.org.&lt;br /&gt;
&lt;br /&gt;
Current verified working version is XCode 2.4.1&lt;br /&gt;
&lt;br /&gt;
If you really cannot use XCode 2.4.1 nor XCode 2.4:&lt;br /&gt;
&lt;br /&gt;
Xcode 2.2, 2.3 are known to work for Aqua development. If any earlier versions work as well, please add them here.&lt;br /&gt;
&lt;br /&gt;
==== X11SDK  (soon optional) ==== &lt;br /&gt;
&lt;br /&gt;
A dependency for Mozilla plugin needs some prototype defined in some Xlib.h header. &lt;br /&gt;
&lt;br /&gt;
Please note, this dependency is not needed in runtime, but only at buildtime. &lt;br /&gt;
&lt;br /&gt;
X11SDK.pkg archive is located in your Tiger&amp;#039;s DVD, and has to be installed in the case of you&amp;#039;re using Mozilla prebuild archives&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;This issue should be fixed soon.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;div align=&amp;quot;left&amp;quot; style=&amp;quot;color:blue; font-size:18px&amp;quot;&amp;gt;&amp;#039;&amp;#039;&amp;#039; Strongly recommended&amp;#039;&amp;#039;&amp;#039;&amp;lt;/div&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
==== ccache ====&lt;br /&gt;
If you intend to build several times OpenOffice, you probably can benefit of ccache. ccache will speed up your future builds. The first time you make a build with ccache you won&amp;#039;t notice it, but then the build will go up to five times faster.&lt;br /&gt;
&lt;br /&gt;
You can install it using fink. It is simply named &amp;quot;ccache&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
If you don&amp;#039;t use fink, you can download it and build it yourself using the source provided at http://ccache.samba.org/&lt;br /&gt;
&lt;br /&gt;
Then, in order to use it, you need to change the following environment variables &amp;#039;&amp;#039;&amp;#039;using bash, and just before doing configure command line&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export CC=&amp;quot;ccache gcc&amp;quot;&lt;br /&gt;
export CXX=&amp;quot;ccache g++&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div align=&amp;quot;left&amp;quot; style=&amp;quot;color:grey; font-size:18px&amp;quot;&amp;gt;[[AquaBuild/Some Background | &amp;#039;&amp;#039;&amp;#039;Some Background (what is aquavcl01, EIS) (click me to know more) &amp;#039;&amp;#039;&amp;#039;]]&amp;lt;/div&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Getting the code (checkout, merge and patch the puppy)&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
aquavcl01 cws does use SRC680 master workspace, and is regularly resynchronized with recent milestones.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;The current milestone as of now (May 3rd 2007) is m211&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
All these milestone numbers below highly depend on the given point-in-time. You can find the current milestone of each cws in the EIS database.&lt;br /&gt;
&lt;br /&gt;
You also need to bear in mind that you have to access to the CVS-Server&amp;#039;s default port (2401). If a firewall stop&amp;#039;s you here you have to setup a CVS-Tunnel.&lt;br /&gt;
&lt;br /&gt;
==== Create a directory for a given milestone, setup CVS access: ==== &lt;br /&gt;
&amp;lt;code&amp;gt;[bash,N]&lt;br /&gt;
 mkdir src680-m211&lt;br /&gt;
 cd src680-m211&lt;br /&gt;
 &lt;br /&gt;
 export CVSROOT=:pserver:anoncvs@anoncvs.services.openoffice.org:/cvs&lt;br /&gt;
 cvs login&lt;br /&gt;
(password is &amp;#039;anoncvs&amp;#039; )  + Enter&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== checkout milestone m211 (1,5 GB): ==== &lt;br /&gt;
&amp;lt;code&amp;gt;[bash,N]&lt;br /&gt;
 cvs -z3 co -r SRC680_m211 OpenOffice2&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Once done, you&amp;#039;ll obtain milestone 211. this not exactly what we want, because all changes concerning aquavcl01 Child workspace are not included. To complete, we need to check aquavcl01 changes.&lt;br /&gt;
&lt;br /&gt;
==== checkout Aquavcl01 (50 MB): ==== &lt;br /&gt;
&lt;br /&gt;
1) First possibility: create a dedicated tree (cool backup)&lt;br /&gt;
&lt;br /&gt;
To check aquavcl01 Child workspace, the most simple is to create aquavcl01 directory, and go inside this dir&lt;br /&gt;
&amp;lt;code&amp;gt;[bash,N]&lt;br /&gt;
 mkdir aquavcl01-src &lt;br /&gt;
 &lt;br /&gt;
 cd aquavcl01-src&lt;br /&gt;
 &amp;lt;/code&amp;gt;&lt;br /&gt;
 (assuming you already did cvs login, and typing all the command line below in one line)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[bash,N]&lt;br /&gt;
&lt;br /&gt;
cvs -z3 co -r cws_src680_aquavcl01 canvas dtrans extensions fpicker \&lt;br /&gt;
freetype instsetoo_native padmin psprint sal scp2 sfx2 sj2 solenv toolkit vcl&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
All the modules listed above will be present at the end ( everyone represents a new directory ) and they are the ones we modified to create the native version.&lt;br /&gt;
&lt;br /&gt;
To verify nothing&amp;#039;s wrong, all are tagged &amp;quot;aquavcl01&amp;quot; (see all CVS/Tag files in the tree) and all you have to do is either rename or delete the one located in src680-m211 and replace them with the one located in aquavcl01-src.&lt;br /&gt;
&lt;br /&gt;
e.g. : canvas in src680-m211 will become canvas_m211 , and then, cp canvas from aquavcl01-src into src-m211&lt;br /&gt;
&lt;br /&gt;
This applies for all the modules listed above.&lt;br /&gt;
&lt;br /&gt;
2) Second possibility: use a little script to extract changes: extract_aquavcl01.sh&lt;br /&gt;
&lt;br /&gt;
This shell script, located in src680-m211 will contain:&lt;br /&gt;
&amp;lt;code&amp;gt;[bash,N]&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
list=&amp;quot;canvas dtrans extensions fpicker freetype instsetoo_native padmin psprint sal scp2 sfx2 sj2  solenv toolkit vcl&amp;quot;&lt;br /&gt;
for i in $list ;  do &lt;br /&gt;
   mv $i $i-m211&lt;br /&gt;
   cvs -z3 co -r cws_src680_aquavcl01 $i&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then chmod +x extract_aquavcl01.sh&lt;br /&gt;
&lt;br /&gt;
and run it:&lt;br /&gt;
&lt;br /&gt;
./extract_aquavcl01.sh&lt;br /&gt;
&lt;br /&gt;
When finished, and if no problem occurs, you should have a complete tree.&lt;br /&gt;
&lt;br /&gt;
=== One-Time preparations and scripts ===&lt;br /&gt;
&lt;br /&gt;
OpenOffice building gets configured by the popular open-source configuration-management package &amp;#039;autoconf&amp;#039;. So you can do your beloved &amp;#039;./configure&amp;#039; command, but in our case this is done in the &amp;#039;config_office&amp;#039; subdirectory. To save the configure parameters and use them with different milestones I used to link-in my shellscript to fire up the ./configure line.&lt;br /&gt;
&lt;br /&gt;
My directory-structure looks like this:&lt;br /&gt;
&lt;br /&gt;
 bin/&lt;br /&gt;
 src680-m182/&lt;br /&gt;
 src680-m196/&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Now I go to the &amp;#039;config_office&amp;#039; subdir and link in my startscript:&lt;br /&gt;
&amp;lt;code&amp;gt;[bash,N]&lt;br /&gt;
 cd src680-m211/config_office/&lt;br /&gt;
 ln -s ../../bin/build.sh&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
And this is how &amp;#039;build.sh&amp;#039; (to be written) looks like :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[bash,N]&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 export BASE=`pwd|sed &amp;#039;s/\/config_office//&amp;#039;`&lt;br /&gt;
 export OOVERSION=`echo $BASE|sed &amp;#039;s/^\/.*\///&amp;#039;`&lt;br /&gt;
 echo Building from     : $BASE&lt;br /&gt;
 echo OpenOffice Version: $OOVERSION&lt;br /&gt;
 ./configure \&lt;br /&gt;
 --with-lang=&amp;quot;de en-US&amp;quot; \&lt;br /&gt;
 --with-jdk-home=/Library/Java/Home/ \&lt;br /&gt;
 --with-epm=internal \&lt;br /&gt;
 --disable-mozab \&lt;br /&gt;
 --disable-odk \&lt;br /&gt;
 --disable-pasf \&lt;br /&gt;
 --disable-gtk \&lt;br /&gt;
 --disable-mozilla \&lt;br /&gt;
 --with-build-version=$OOVERSION-`date +%d-%m-%y` \&lt;br /&gt;
 --disable-fontconfig \&lt;br /&gt;
 --disable-neon \&lt;br /&gt;
 --without-nas&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--disable-odk : disables SDK build, and will avoid you to download some windows dll which is not needed for aqua-build.&lt;br /&gt;
&lt;br /&gt;
--disable-pasf : pasf stands for Portable Audio System file. As we want to use system library rather than portable ones, we disabled this. However, at this time not all functionality will be available with pasf disabled. You might willing to use --with-pasf if you want working audio in your build.&lt;br /&gt;
&lt;br /&gt;
--without-nas : nas stands for Network Audio System, it uses X11, if you want to use it in your build, just remove this flag. You will need to install the X11 package provided in your CDs/DVD Mac OS X installation. X11 SDK from xCode tools is not required for build this.&lt;br /&gt;
&lt;br /&gt;
This is allowedly a pretty much limited setup for now, but it will progressively change, with the progress we&amp;#039;ll do with Aqua port.&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;List of Patches requiring testing before for integration&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
All patches that developers have that need testing or peer review should be added here.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;div align=&amp;quot;left&amp;quot; style=&amp;quot;color:grey; font-size:18px&amp;quot;&amp;gt;[[AquaBuild/Native FilePicker | &amp;#039;&amp;#039;&amp;#039;Native FilePicker (click me to know more) &amp;#039;&amp;#039;&amp;#039;]]&amp;lt;/div&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Soon : new salframe implementation ( using HIFramework )&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Known build issues &amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
Since latest resync, no build issues have been reported.&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Doing the build (about 4,5 GB)&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
Fine, now we have a (hopefully) working &amp;#039;build.sh&amp;#039; in the config_office subdir. We need to run it beforehand:&lt;br /&gt;
&lt;br /&gt;
 cd src680-m222/config_office/&lt;br /&gt;
 ./build.sh&lt;br /&gt;
&lt;br /&gt;
This will setup the necessary includefiles and create a couple of files in the &amp;#039;&amp;#039;&amp;#039;parent&amp;#039;&amp;#039;&amp;#039; directory (bootstrap, MacOSXPPCEnv.Set.sh, MacOSXPPCEnv.Set). If you are using the sh, ksh or bash you only need to take care for &amp;#039;MacOSXPPCEnv.Set.sh&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Now we need to get back to our base-directory, run the bootstrap script, source our Enviroment (MacOSXPPCEnv.Set.sh) and finally start the build-process:&lt;br /&gt;
&lt;br /&gt;
On PowerPC:&lt;br /&gt;
&lt;br /&gt;
 cd ..&lt;br /&gt;
 ./bootstrap&lt;br /&gt;
 source MacOSXPPCEnv.Set.sh&lt;br /&gt;
 cd instsetoo_native&lt;br /&gt;
 build --all -P2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Or (on Mac Intel): &lt;br /&gt;
&lt;br /&gt;
 cd ..&lt;br /&gt;
 ./bootstrap&lt;br /&gt;
 source MacOSXX86Env.Set.sh&lt;br /&gt;
 cd instsetoo_native&lt;br /&gt;
 build --all -P4&lt;br /&gt;
&lt;br /&gt;
The main purpose of the &amp;#039;&amp;#039;&amp;#039;boostrap&amp;#039;&amp;#039;&amp;#039; script is to build (if necessary) the dmake utility used. Dmake once was a unix make-clone made by wticorp but got incorporated into OpenOffice since it was orphaned. For more information about dmake, it&amp;#039;s history and manpage have a look here: http://tools.openoffice.org/dmake/index.html&lt;br /&gt;
&lt;br /&gt;
Sourcing MacOSXPPCEnv.Set.sh is very important not only for building but also for &amp;#039;&amp;#039;&amp;#039;running&amp;#039;&amp;#039;&amp;#039; svdem later on. Here all the Environment-Variables for the Build will be set up. For a detailed description see [[Environment_Variables]]. Please note that on Intel machines, &amp;#039;MacOSXPPCEnv.Set&amp;#039; should be substituted with &amp;#039;MacOSXX86Env.Set&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
This Build process takes on my box (Dual 1.8 GHz G5, 1.5GB RAM) roughly 10 hours, and 3 to 6 hours on Mac Intel. Be patient.&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Installing, preparing and running OpenOffice.org&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039; Find the Bundle&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
&lt;br /&gt;
Once the build completed, the Final product ( en-US version ) is named :  OpenOffice.org-2.3.0_en-US.dmg ( for version 2.3.0 e.g.) &lt;br /&gt;
&lt;br /&gt;
And is located in instsetoo_native/unxmacxi.pro/OpenOffice/install/en-US  directory ( replace en-US with your locale )&lt;br /&gt;
&lt;br /&gt;
[[Image:Bundle_location.jpg]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039;Run the soffice.bin&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In one line :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;#039;&amp;#039;&amp;#039;Double click the .dmg , drag the OpenOffice.org icon in the folder you want, and double click to run it !!&amp;#039;&amp;#039;&amp;#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note : soffice.bin leads XCode to not work (because of the dot in the name). The issue has been reported to xcode-users list.&lt;br /&gt;
 &lt;br /&gt;
We&amp;#039;re nearly through, let&amp;#039;s fire-off the binary:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
But a lot has to be done, and if you want to trace (using gdb e.g.), just do:&lt;br /&gt;
&lt;br /&gt;
cd &amp;lt;INSTALL_DIR&amp;gt;/OpenOffice.org\ 2.3.app/Contents/MacOS&lt;br /&gt;
&lt;br /&gt;
and run:&lt;br /&gt;
&lt;br /&gt;
gdb --args soffice.bin&lt;br /&gt;
&lt;br /&gt;
(add any breakpoint you want)&lt;br /&gt;
&lt;br /&gt;
r to run OpenOffice.org&lt;br /&gt;
&lt;br /&gt;
=== Use vcl menubar and / or vcl menus ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Native menus are defaults. If you want to use vcl menus, do:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AQUA_NATIVE_MENUS=FALSE ./soffice.bin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note: options to not recover is  -norestore , and to bypass the user informations to fill in, use -nofirststartwizard&lt;br /&gt;
&lt;br /&gt;
AQUA_NATIVE_MENUS=FALSE ./soffice.bin -nofirststartwizard -norestore&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Notice the enviroment variable here. AQUA_NATIVE_MENUS is experimental stuff created by Pavel, SAL_NO_NWF was created some times ago, and is located in vcl/source/window/window.cxx . At the moment we have:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;15&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Variable || Function&lt;br /&gt;
|-&lt;br /&gt;
| SAL_NO_NWF=TRUE  || disable native controls code&lt;br /&gt;
|-&lt;br /&gt;
| AQUA_NATIVE_MENUS=FALSE || disable native menus code&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Both changes are marked with comments in the source code, and when we remove them in the future, native controls and native menus will be enabled by default.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Debug and contribute &amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div align=&amp;quot;left&amp;quot; style=&amp;quot;color:blue; font-size:18px&amp;quot;&amp;gt;&amp;#039;&amp;#039;&amp;#039;See [[MacOSX_Debug_OpenOffice.org_using_XCode]]&amp;#039;&amp;#039;&amp;#039;&amp;lt;/div&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div align=&amp;quot;left&amp;quot; style=&amp;quot;color:blue; font-size:18px&amp;quot;&amp;gt;You want to debug using Xemacs ?&amp;lt;/div&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Michael Sicotte wrote a very usefull blog entry about : &amp;#039;&amp;#039;&amp;#039;[http://www.mikesicotte.com/2007/02/21/debugging-ooo-with-xemacs-and-gdb debugging OOo with XEmacs and GDB on Mac OS X]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;External links&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
# [http://www.openoffice.org/issues/query.cgi Bug Database]&lt;br /&gt;
# Mailinglist: [http://porting.openoffice.org/servlets/ProjectMailingListList mac@porting.openoffice.org]  (subscribe is mandatory )&lt;br /&gt;
# IRC Meeting-Logs (#ooo_macport@freenode.org): [[Previous_Mac_Meeting_logs]] [[MacOSXPortMeetings]]&lt;br /&gt;
# TX20: http://eric.bachard.free.fr/UTBM_TX20/reports/Carbon_vcl.pdf&lt;br /&gt;
# OpenOffice Source Directory Structure: http://wiki.services.openoffice.org/wiki/Source_code_directories&lt;br /&gt;
# Pavels Patch Wiki: http://blog.janik.cz/&lt;br /&gt;
# Eric Bachard Wiki: http://wiki.services.openoffice.org/wiki/User:Ericb&lt;br /&gt;
# Sebastien Plisson Wiki: http://splisson.blogspot.com/&lt;br /&gt;
# Christian Lippka Wiki: http://wiki.services.openoffice.org/wiki/User:CL&lt;br /&gt;
# Carbon: http://developer.apple.com/carbon&lt;br /&gt;
# EIS: http://eis.services.openoffice.org/EIS2/servlet/Logon&lt;br /&gt;
# Runtime Configuration: http://developer.apple.com/documentation/MacOSX/Conceptual/BPRuntimeConfig/index.html&lt;br /&gt;
# OpenOffice Domain Developer http://wiki.services.openoffice.org/wiki/DomainDeveloper&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Screenshots&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
# Eric Bachard screenshots (some are from Stephan Schaefer) http://eric.bachard.free.fr/mac/aquavcl/screenshots/&lt;br /&gt;
# Most recent: http://eric.bachard.free.fr/mac/aquavcl/screenshots/aqua_menus_05_nov_06/&lt;br /&gt;
# Pavel Janik screenshots http://blog.janik.cz/images/MacOSX/2006-08-10&lt;br /&gt;
# Important screenshot (eventloop issue): http://blog.janik.cz/images/MacOSX/  =&amp;gt; See: OOoMenus-separator-and-disabled_entries.png&lt;br /&gt;
# Aqua look (the begining): &lt;br /&gt;
http://eric.bachard.free.fr/mac/aquavcl/screenshots/mars2007/combobox_search_and_replace02_14mars07.jpg&lt;br /&gt;
&lt;br /&gt;
More menus: http://eric.bachard.free.fr/mac/aquavcl/screenshots/aqua_menus_05_nov_06/index.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:MacOSX]]&lt;br /&gt;
[[Category:Porting]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Aqua]]&lt;/div&gt;</summary>
		<author><name>Plipli</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=User:Ericb&amp;diff=30798</id>
		<title>User:Ericb</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=User:Ericb&amp;diff=30798"/>
		<updated>2007-04-25T20:19:13Z</updated>

		<summary type="html">&lt;p&gt;Plipli: /* Misc */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Public Documentation License Notice==&lt;br /&gt;
&lt;br /&gt;
The contents of this Documentation (excepted Native Port Roadmap),are subject to the Public Documentation License Version 1.0 (the &amp;quot;License&amp;quot;); you may only use this Documentation if you comply with the terms of this License. A copy of the License is available at http://www.openoffice.org/licenses/PDL.html.&lt;br /&gt;
The Original Documentation is &amp;quot;Mac OS X native port&amp;quot;. The Initial Writer of the Original Documentation is (JCA) Eric Bachard (C) 2005-2006. All Rights Reserved. (Initial Writer contact(s): ericb@openoffice.org.)&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Mac OS X Native port&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;messagebox cleanup metadata&amp;quot; style=&amp;quot;border:1px solid blue;background-color:#B3FFF5;padding:7px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;The first Mac OS X native port objective is make OpenOffice.org run without X11 use, to make it a real Mac application.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;The second one is respect Aqua Human interface Guidelines&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; This is a long term work, and every help and/or contributions, like donations** are welcome.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 **see http://contributing.openoffice.org/index.html&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Native Port Roadmap&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;2006&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
* June 2006: work in progress &lt;br /&gt;
&lt;br /&gt;
- Basis: frame, instances, threads, drawing, painting, resizing (Stephan Schaefer, Tino Rachui)&lt;br /&gt;
&lt;br /&gt;
 Done: &lt;br /&gt;
 implement threads&lt;br /&gt;
 create, manage instance&lt;br /&gt;
 create, manage windows (including parents)&lt;br /&gt;
 create, manage events&lt;br /&gt;
 create manage drawing, resizing&lt;br /&gt;
 create, add menus (Pavel Janik)&lt;br /&gt;
 toggle window fullscreen (Pierre de Filippis)&lt;br /&gt;
 make font server work (Stephan Schaefer)&lt;br /&gt;
&lt;br /&gt;
* Current status font support (Stephan Schaefer, 2006/07/28): the following features are basically working now&lt;br /&gt;
** font selection&lt;br /&gt;
** font size&lt;br /&gt;
** simple font attributes (bold, italic)&lt;br /&gt;
&lt;br /&gt;
 Next step: document first part, and propose design&lt;br /&gt;
&lt;br /&gt;
- native filepicker (Pavel Janik, Florian Heckl)&lt;br /&gt;
&lt;br /&gt;
- native printing implementation (Oliver?)&lt;br /&gt;
&lt;br /&gt;
- native font implementation (Eric Bachard)&lt;br /&gt;
&lt;br /&gt;
* September 2006: &lt;br /&gt;
&lt;br /&gt;
- first proofs of concept: fonts, filepicker .. (more?)&lt;br /&gt;
- show the results (OOoCon 2006?)&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;2007&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
* January 2007: first alpha implementation&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Strategy for native port&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Possible Actions&amp;#039;&amp;#039;&amp;#039;: &lt;br /&gt;
&lt;br /&gt;
Identify us:&lt;br /&gt;
&lt;br /&gt;
#Complete the arrays below&lt;br /&gt;
#Update photos on frapr.com?&lt;br /&gt;
&lt;br /&gt;
Share the work:&lt;br /&gt;
&lt;br /&gt;
#Divide the work between little Teams&lt;br /&gt;
#Update Todo list regularly -&amp;gt; needs some love these days ... [http://wiki.services.openoffice.org/wiki/Mac_OS_X_Porting_-_Work_Areas/Todo%27s]&lt;br /&gt;
&lt;br /&gt;
Help:&lt;br /&gt;
&lt;br /&gt;
#Teach tools between us&lt;br /&gt;
#Do a debug party on IRC&lt;br /&gt;
#write documentation&lt;br /&gt;
&lt;br /&gt;
Meet us:&lt;br /&gt;
&lt;br /&gt;
#IRC&lt;br /&gt;
#Mac Meeting (like nov2005 in Hamburg?)&lt;br /&gt;
&lt;br /&gt;
Inform:&lt;br /&gt;
&lt;br /&gt;
#Update website regularly&lt;br /&gt;
#Blogs&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;WHO&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
Mac Team:&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;vertical-align:top; text-align:left; background-color:#efefef;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#d6d6d6;font-weight:bold;&amp;quot; &lt;br /&gt;
|Developer \ skills || build || write code || code review || debug/trace (higher is better) || contribute to documentation ||&lt;br /&gt;
|-&lt;br /&gt;
|ericb|| x || x || || 1 || x ||&lt;br /&gt;
|-&lt;br /&gt;
|pjanik|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|ssa|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|maho|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|tinor|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|schmidtm|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|ebischoff|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|obr|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|cl|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|aliscafo|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|fheckl|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Fridrich|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|plipli|| || x || || || x ||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Other resources&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
fonts: ?&lt;br /&gt;
&lt;br /&gt;
events: ?&lt;br /&gt;
&lt;br /&gt;
QA: James McKenzie leads QA for the Mac OS X port of OpenOffice.org and is looking for volunteers to spread this effort over several people and needs people from all over the world to test various languages.&lt;br /&gt;
&lt;br /&gt;
graphical: ?&lt;br /&gt;
&lt;br /&gt;
Communication: ?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;WHAT&amp;#039;&amp;#039;&amp;#039;: Status of most important tasks&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;vertical-align:top; text-align:left; background-color:#efefef;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#d6d6d6;font-weight:bold;&amp;quot; &lt;br /&gt;
| Task || Names|| Urgency (1=higher)|| Work in Progress || Done || Code review || Debug || Integration || &lt;br /&gt;
|-&lt;br /&gt;
|Get rid of X11||done || 1 || x || x || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Bundle|| || 1 || x || || || || | ||&lt;br /&gt;
|-&lt;br /&gt;
|Drawing|| || 1 || x || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Fonts||plipli || 1 || x || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Events management|| || 2 || x || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Controls (see list) ||ericb, aliscafo || 2 || x || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Native FilePicker||Florian Heckl, Pavel Janik || 3 || x || x || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Native Printing||Yvan Barthelemy || 3 || x || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Native SpellChecker|| || 4 || || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Player||Mox Soini || 4 || x || || || || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Other tasks:&lt;br /&gt;
&lt;br /&gt;
Help for writing bug lists, status of bugs ..etc&lt;br /&gt;
&lt;br /&gt;
Write howto use gdb, leaks, other tools&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;WHEN&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
From Christian Lippka (last meeting, 25th of august 2006): &lt;br /&gt;
 Aug 26 00:21:38 ChristianL&lt;br /&gt;
 from my point of view what is missing for point 1:&lt;br /&gt;
 text layout, complete font support, keyboard support,&lt;br /&gt;
 fixing repaint issues, having aqua install and run out of the box&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;September 2006&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Present the current state of the project at the 2006 OpenOffice conference in Lyon and Paris&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Late 2006&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
fix OpenOffice.org launch&lt;br /&gt;
fix drawing (repainting)&lt;br /&gt;
Implement missing methods and fix most important bugs (mainly the one leading to crash) in:&lt;br /&gt;
ATS&lt;br /&gt;
Salgraphics&lt;br /&gt;
Salinstance&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;January or February 2007&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
make Java work (works partially)&lt;br /&gt;
make intensive debug&lt;br /&gt;
present something working as alpha&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;June 2007	&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Implementation of:&lt;br /&gt;
native filepicker&lt;br /&gt;
native printing&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Become a Domain Developer for Mac OS X port&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
People regularly contributing to Mac OS x port with regular and quality patches are, after proposal, invited to become a [[DomainDeveloper]].&lt;br /&gt;
&lt;br /&gt;
The purpose of this document is to clearly define all the steps to become a [[DomainDeveloper]]. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Preliminary :  step 1 in  [[Commit_Rights]] must be completed and checked, and you must be in the list of [[http://www.openoffice.org/FAQs/faq-licensing.html#jca1 JCA Licensed people]]&lt;br /&gt;
&lt;br /&gt;
=== Steps for ssh2 key to be uploaded ===&lt;br /&gt;
&lt;br /&gt;
==== Create the key ====&lt;br /&gt;
&lt;br /&gt;
Everything is described here : [[http://www.openoffice.org/scdocs/ddSSHGuide.html SSH Guide]] &lt;br /&gt;
&lt;br /&gt;
==== Upload the key ====&lt;br /&gt;
&lt;br /&gt;
You must create an issue, like described below  :&lt;br /&gt;
&lt;br /&gt;
Component : www&lt;br /&gt;
&lt;br /&gt;
Sub Component : openoffice.org cvs&lt;br /&gt;
&lt;br /&gt;
Title : CVS Commit access request&lt;br /&gt;
&lt;br /&gt;
Add louis ( Louis Suarez Potts) or st ( Stefan Taxhet ) on CC&lt;br /&gt;
&lt;br /&gt;
Upload your ssh2 public key respecting the process ( Attach a DSA key, not an RSA )&lt;br /&gt;
&lt;br /&gt;
A project lead will confirm your request &lt;br /&gt;
&lt;br /&gt;
Then the support will upload your key&lt;br /&gt;
&lt;br /&gt;
Once done the issue is set to Fixed , and the next step has to be verified before &amp;#039;&amp;#039;&amp;#039;you&amp;#039;&amp;#039;&amp;#039; close it.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;EXAMPLE&amp;#039;&amp;#039;&amp;#039; : [[http://www.openoffice.org/issues/show_bug.cgi?id=75291 Upload SSH2 Key for Etsushi Kato]]&lt;br /&gt;
&lt;br /&gt;
==== Verify it works ====&lt;br /&gt;
&lt;br /&gt;
You now can try to connect via tunnel, and follow instructions given [[http://www.openoffice.org/scdocs/ddSSHGuide.html SSH Guide]] &lt;br /&gt;
&lt;br /&gt;
If something goes wrong, ask for help to support, with a maximum of details, to solve the problem.&lt;br /&gt;
&lt;br /&gt;
Once it works, the issue can be closed, and you can e.g. test downloading a module from tunnel repository :&lt;br /&gt;
&lt;br /&gt;
First create a tunnel with the command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh -2 -x -L 2401:localhost:2401 tunnel@openoffice.org&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then in a new window:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export CVSROOT=&amp;quot;:pserver:your_login@localhost:/cvs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
cvs login ( enter )&lt;br /&gt;
&lt;br /&gt;
(your password )&lt;br /&gt;
&lt;br /&gt;
mkdir TEST&lt;br /&gt;
&lt;br /&gt;
cd TEST&lt;br /&gt;
&lt;br /&gt;
cvs -z4 co -r SRC680_m205 vcl &lt;br /&gt;
&lt;br /&gt;
cd vcl &lt;br /&gt;
&lt;br /&gt;
cat CVS/Root  -&amp;gt; should indicate : your local repository&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ask for CVS access for all modules required ===&lt;br /&gt;
&lt;br /&gt;
Two steps : create an issue is mandatory because the concerned project is tools, and because people can have only ssh2 key without being [[DomainDeveloper]].&lt;br /&gt;
&lt;br /&gt;
==== Create an issue ====&lt;br /&gt;
&lt;br /&gt;
You must create an issue, described below  :&lt;br /&gt;
&lt;br /&gt;
Component : tools&lt;br /&gt;
&lt;br /&gt;
Sub Component : www&lt;br /&gt;
&lt;br /&gt;
Title : CVS access to all modules required&lt;br /&gt;
&lt;br /&gt;
Assigned to mh  +  CC for ericb and/or pjanik&lt;br /&gt;
&lt;br /&gt;
Present yourself quickly, and ask the access&lt;br /&gt;
&lt;br /&gt;
A project lead will confirm&lt;br /&gt;
&lt;br /&gt;
An admin will confirm this is ok, and set the issue to Fixed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;EXAMPLE&amp;#039;&amp;#039;&amp;#039; : [[http://www.openoffice.org/issues/show_bug.cgi?id=75494 CVS Access all modules for Etsushi Kato]]&lt;br /&gt;
&lt;br /&gt;
==== Verify ====&lt;br /&gt;
&lt;br /&gt;
Create the tunnel :&lt;br /&gt;
&lt;br /&gt;
open a terminal and type :&lt;br /&gt;
&lt;br /&gt;
ssh -2 -x -L 2401:localhost:2401 tunnel@openoffice.org&lt;br /&gt;
&lt;br /&gt;
once logged in, open a new terminal, and do ( for example ):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd $OOO_SRC_ROOT/&lt;br /&gt;
&lt;br /&gt;
source MacOSXPPCEnv.Set.sh  { source MacOSXX86Env.Set.sh for Mac Intel }&lt;br /&gt;
&lt;br /&gt;
cd vcl  ( for example )&lt;br /&gt;
&lt;br /&gt;
IMPORTANT : be sure vcl has been checked from tunnel, not from anoncvs ( cat CVS/Root will give you the answer )&lt;br /&gt;
&lt;br /&gt;
export CWS_WORK_STAMP=aquavcl01   # Only needed for working with [[EIS]], can change for a different CWS ;) &lt;br /&gt;
&lt;br /&gt;
cd aqua/source/gdi&lt;br /&gt;
&lt;br /&gt;
add your changes to your_file.cxx, then commit :&lt;br /&gt;
&lt;br /&gt;
cvs commit -m &amp;quot;#i75689# bla bla ... the reason of the modification(s)&amp;quot;  your_file.cxx  # The #i75689# is an issue number in the tracker&lt;br /&gt;
&lt;br /&gt;
cvs update&lt;br /&gt;
&lt;br /&gt;
If nothing is wrong, cvs update should not return M for your_file.cxx, means the commit is successfull.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
In case of problem, use the issue until it is fixed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;#039;&amp;#039;&amp;#039;Welcome aboard :)&amp;#039;&amp;#039;&amp;#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Mac OS X porter Team at WWDC 2007&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
=== What is WWDC 2007 ? ===&lt;br /&gt;
&lt;br /&gt;
See [http://developer.apple.com/wwdc/ Apple WWDC 2007]&lt;br /&gt;
&lt;br /&gt;
====Labs Agenda====&lt;br /&gt;
&lt;br /&gt;
It is extremely important to organize us for Labs.&lt;br /&gt;
&lt;br /&gt;
The rule is extremely simple : bring your laptop, your code, and ask :)&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;10&amp;quot;&lt;br /&gt;
| Days&lt;br /&gt;
|monday&amp;lt;br&amp;gt;June 11&lt;br /&gt;
|tuesday&amp;lt;br&amp;gt;June 12&lt;br /&gt;
|wednesday&amp;lt;br&amp;gt;June 13&lt;br /&gt;
|thursday&amp;lt;br&amp;gt;June 14&lt;br /&gt;
|friday &amp;lt;br&amp;gt;June 15&lt;br /&gt;
|-&lt;br /&gt;
|Labs&lt;br /&gt;
|&amp;lt;br&amp;gt;Afternoon&lt;br /&gt;
|Morning&amp;lt;br&amp;gt;Afternoon&lt;br /&gt;
|Morning&amp;lt;br&amp;gt;Afternoon&lt;br /&gt;
|Morning&amp;lt;br&amp;gt;Afternoon&lt;br /&gt;
|Morning&amp;lt;br&amp;gt;Afternoon&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====&amp;#039;&amp;#039;&amp;#039;Interesting Labs&amp;#039;&amp;#039;&amp;#039;====&lt;br /&gt;
&lt;br /&gt;
The complete list : [http://developer.apple.com/wwdc/tracks/macosx.html Mac OS X Essentials]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Core Text Lab &lt;br /&gt;
Receive one-on-one technical assistance and troubleshooting advice from the Core Text engineering team. Learn how to use the advanced font handling and blazingly fast Unicode layout capabilities of Core Text. Bring your laptop, your code, and your questions.&lt;br /&gt;
&lt;br /&gt;
*HIToolbox Lab&lt;br /&gt;
Work on tuning and debugging HIToolbox code in your Carbon application. Receive one-on-one technical assistance and troubleshooting advice from the High Level Toolbox engineering team, Apple DTS engineers, and technology evangelists. Bring your laptop, your code, and your questions.&lt;br /&gt;
&lt;br /&gt;
=== Our Objectives at the WWDC 2007 ===&lt;br /&gt;
&lt;br /&gt;
1) Contacts with Apple&amp;#039;s teams : &lt;br /&gt;
&lt;br /&gt;
* Present our current work, methods and team to Apple people, easy to meet only during WWDC ( Apple people can give us a face, and keep the contact )&lt;br /&gt;
&lt;br /&gt;
=&amp;gt; There is information difficult to find or ask by email, or IRC or whatever web : direct contact saves a lot of time, and is a very efficient way to progress with code&lt;br /&gt;
&lt;br /&gt;
* Get their impression about what we have already done and what is still ToDo&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2) Mac Team&amp;#039;s goals on Aqua OOo -&amp;gt; Apple&amp;#039;s Expertise : &lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Give MacOS X users the OOo suite they deserve&amp;quot; :&lt;br /&gt;
&lt;br /&gt;
 =&amp;gt; As mac platform and apple&amp;#039;s product fans, we are proud to bring the quality and power of OOo to mac users community&lt;br /&gt;
 =&amp;gt; Make OOo uses all the power of Mac OSX, including upcoming Leopard !&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;OOo to be as Apple HIG compliant as possible&amp;quot; :&lt;br /&gt;
&lt;br /&gt;
 =&amp;gt; Define what is expected for User Interface with people from Apple UI project&lt;br /&gt;
&lt;br /&gt;
 - FYI : Last year, Apple UI project proposed ericb to help us, once our native menus will be working. &lt;br /&gt;
&lt;br /&gt;
This is now done, and meet them cannot be a bad idea :)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3) Get code guidelines, tips, samples : &lt;br /&gt;
&lt;br /&gt;
 =&amp;gt; Ask for code review and find code snippets for :&lt;br /&gt;
&lt;br /&gt;
- HIView&lt;br /&gt;
- Printing&lt;br /&gt;
- Drag and Drop&lt;br /&gt;
+ more if possible&lt;br /&gt;
&lt;br /&gt;
=&amp;gt; More than 1000 Apple engineers are present, and can answer our questions regarding the code, during the whole week&lt;br /&gt;
&lt;br /&gt;
During WWDC2006 we found all the relevant informations for RunApplicationEventLoop() to be implemented . Without this code, we wouldn&amp;#039;t have something working at all, because this event loop is the key for everything in OpenOffice.org on Mac OS X ( without X11 ).&lt;br /&gt;
&lt;br /&gt;
4) Social Contract : Discuss and meet new developers and / or american people working for Mac OS X port (like Michael Sicotte, Vijay Venkatraman , other.. )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5) Visibility : make OpenOffice.org project visible in an ocean of other software. This is extremely important because it shows that OpenOffice.org project is alive for Mac OS X platform. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Who ? ===&lt;br /&gt;
&lt;br /&gt;
* Sébastien Plisson&lt;br /&gt;
* Eric Bachard&lt;br /&gt;
*  ???&lt;br /&gt;
&lt;br /&gt;
=== Todo list ===&lt;br /&gt;
&lt;br /&gt;
Please add topics, technical questions you would see asked by attendees to Apple engineers during WWDC&lt;br /&gt;
&lt;br /&gt;
====Suggestions for current issues to be fixed ====&lt;br /&gt;
&lt;br /&gt;
Timers :&lt;br /&gt;
&lt;br /&gt;
Current code is obsolete, and compatibility with Leopard won&amp;#039;t probably exist. &lt;br /&gt;
&lt;br /&gt;
Pavel wrote a patch using recent code. Seems to work fine, excepted a thread issue ( never crashed because of that yet , but this is probably correct) &lt;br /&gt;
&lt;br /&gt;
Salframe : &lt;br /&gt;
&lt;br /&gt;
Looot of things : &lt;br /&gt;
&lt;br /&gt;
*Find infos/code sample about parenting&lt;br /&gt;
&lt;br /&gt;
*Code review for HIFrameWork implementation &lt;br /&gt;
&lt;br /&gt;
*adapt native widget framework&lt;br /&gt;
&lt;br /&gt;
Events : code review, tips&lt;br /&gt;
&lt;br /&gt;
ATS : code review, ATS issues&lt;br /&gt;
&lt;br /&gt;
Mike Sicotte:  &lt;br /&gt;
I understood that implementing printing in aqua OOo was a topic that we didn&amp;#039;t get accepted into Google SOC - so remains on the ToDo list.  I notice that there are three Sessions specfically related to printing at WWDC:&lt;br /&gt;
    Leveraging the Common Unix Printing System (CUPS)&lt;br /&gt;
    Printing with Style in Mac OS X&lt;br /&gt;
    Printing Lab&lt;br /&gt;
If this is judged to be a good use of time at WWDC I would be willing to spend some time to help further develop the questions to be addressed with the Apple engineers.&lt;br /&gt;
&lt;br /&gt;
ericb-&amp;gt;Mike Sicotte&lt;br /&gt;
&lt;br /&gt;
Good idea. You are welcome :)&lt;br /&gt;
&lt;br /&gt;
==== Misc ====&lt;br /&gt;
&lt;br /&gt;
*describe the schedule of the travel&lt;br /&gt;
&lt;br /&gt;
ericb  : &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mulhouse -&amp;gt; Paris -&amp;gt; SF :  9th of June    SF scheduled arrival : 7:13 pm&lt;br /&gt;
SF -&amp;gt; Paris -&amp;gt; Mulhouse :  16th of June ( arrival 17th )  SF departure for the return :  3:00 pm&lt;br /&gt;
&lt;br /&gt;
Hotel : King Georges ( close to Union Square )&lt;br /&gt;
&lt;br /&gt;
Airport to Hotel transportation : not included&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sebastien (aka plipli) : &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Paris-&amp;gt;SF : 3rd June&lt;br /&gt;
SF-&amp;gt;Paris : 15th June in the evening&lt;br /&gt;
&lt;br /&gt;
Hotel : to be coompleted&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
third attendee :&lt;br /&gt;
&lt;br /&gt;
[to be completed]&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
*Prepare 50 to 100 business cards  : &lt;br /&gt;
&lt;br /&gt;
the most simple is to use the model I can provide on demand , and print them with special paper ( pre-cut )&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Mac OS X porter Team at OOoCon 2007&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
=== Who ? ===&lt;br /&gt;
&lt;br /&gt;
* Shaun McDonald&lt;br /&gt;
* Eric Bachard&lt;br /&gt;
* (list to be completed)&lt;br /&gt;
&lt;br /&gt;
=== What ? ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The conference is over 3 days. Presentations should last around 45 minutes. http://www.openoffice.org/servlets/ReadMsg?list=announce&amp;amp;msgNo=320 Papers have to be submitted by 1st June to be considered.&lt;br /&gt;
&lt;br /&gt;
Ideas :&lt;br /&gt;
&lt;br /&gt;
Mike Sicotte:  Perhaps the results of the Google SOC could be a presentation.&lt;br /&gt;
&lt;br /&gt;
*create a complete topic for Mac port (one stream for a day or half day)&lt;br /&gt;
*How to improve ooo usability though the use of floating palettes instead of modal dialogs&lt;br /&gt;
&lt;br /&gt;
- several presentations / BOF &lt;br /&gt;
&lt;br /&gt;
Eric Bachard : Aqua OpenOffice.org ( conf / 1 hour )&lt;br /&gt;
&lt;br /&gt;
Others ?&lt;br /&gt;
&lt;br /&gt;
*reserve rooms together ? Better rent a house? &lt;br /&gt;
&lt;br /&gt;
* [FIXME]&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;2nd Mac porters meeting&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
This section has been moved to [[2nd Mac porters meeting]]&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;IRC Mac port meetings&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
This section has been moved to [[MacOSXPortMeetings]].&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Mac OS X (X11) Quality Assurance&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
This section has been moved to [[Mac OS X ( X11) Quality Assurance]]&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Mac OS X Implementing HIView and Carbon events&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
This section has been moved to [[Mac OS X Implementing HIView ]]&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Debug OpenOffice.org using XCode &amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
[[ MacOSX Debug OpenOffice.org using XCode]]&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Description of the Native Port problem&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
=== How does OpenOffice.org work on Mac OS X? ===&lt;br /&gt;
&lt;br /&gt;
Currently, on Mac OS X, OpenOffice.org uses X11, as &amp;quot;client&amp;quot;: X11 is a graphical server, coming from Unix world, and able to run under Linux, *BSD, Solaris, Mac OS X.&lt;br /&gt;
&lt;br /&gt;
 - X11 is run as an application, managed like other Apple applications.&lt;br /&gt;
 - All unix like applications are managed by X11, and from Aqua environment, only X11 is seen as only one applicatiion, &lt;br /&gt;
  even if other Unix/Linux (e.g.) applications are runing.&lt;br /&gt;
&lt;br /&gt;
OpenOffice.org asks X11 to display a window, waits for X11 acknowledgment, and OpenOffice.org displays the window. All transactions use the network, locally or not. the same mechanism is used for everything to be displayed.&lt;br /&gt;
&lt;br /&gt;
[[User:Ericb|Ericb]] 11:39, 3 June 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
=== Issues and known problems ===&lt;br /&gt;
&lt;br /&gt;
All events are managed by OpenOffice.org and X11, using the Xlib&lt;br /&gt;
&lt;br /&gt;
Only .ttf fonts type is currently available. Note: &amp;#039;&amp;#039;&amp;#039;system fonts are available &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
The rendering is made by X11, not by Mac OS X rendering engine.&lt;br /&gt;
&lt;br /&gt;
X11 and all its clients are seen as one application only: drag and drop protocol does not work because of that (solution: Pasteboard Manager)&lt;br /&gt;
&lt;br /&gt;
==== Other links ====&lt;br /&gt;
&lt;br /&gt;
http://wiki.services.openoffice.org/wiki/List_of_OpenOffice.org_Mac_OS_X_issues_and_problems#&lt;br /&gt;
&lt;br /&gt;
http://wiki.services.openoffice.org/wiki/Printing_problems_with_OpenOffice.org_2.0_for_Mac_OS_X#Reporting_printing_problems&lt;br /&gt;
&lt;br /&gt;
[[User:Ericb|Ericb]] 11:39, 3 June 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
== What do we have to do?==&lt;br /&gt;
&lt;br /&gt;
* (in progress) : Implement direct access to Apple graphical engine, using Apple API: Quartz2D/CoreGraphics (and replacing Xlib use)&lt;br /&gt;
&lt;br /&gt;
like: instantiate, manage events and threads for a graphical instance + all needed objects, drawing: manage all drawing cases&lt;br /&gt;
&lt;br /&gt;
* (in progress) : Implement native events management, using CarbonEventManager (replacing Xlib management)&lt;br /&gt;
&lt;br /&gt;
* (in progress) : Implement native font use, using Apple Type Server and ATSUI (for Unicode Imagery) (replacing X11 management)&lt;br /&gt;
&lt;br /&gt;
Work in progress: [[Mac OS X Porting - Native Fonts]]&lt;br /&gt;
&lt;br /&gt;
* Implement native sound, using QuickTime (replacing Java Media Framework): [[Mac OS X Porting - Native Audio and Video]]&lt;br /&gt;
&lt;br /&gt;
* Implement native Drag and drop, Implementing Pasteboard Manager: [[Mac OS X Porting - Native Drag and drop]]&lt;br /&gt;
&lt;br /&gt;
* (done experimental) Implement Native Filepicker&lt;br /&gt;
&lt;br /&gt;
* Implement Native Printing: current uses cups, but native printing is mandatory: [[Mac OS X Porting - Native_Printing]]&lt;br /&gt;
&lt;br /&gt;
* Implement Apple Spellchecker&lt;br /&gt;
&lt;br /&gt;
--[[User:Plipli|Plipli]] 09:27, 25 March 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Where is located the code to be modified?&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
Most of the changes are located in vcl (Visual Class Layer), for everything graphical, events, fonts, rendering and printing.&lt;br /&gt;
&lt;br /&gt;
Other, for sound and movies will be in avmedia (where the player is implemented in OpenOffice.org sources).&lt;br /&gt;
&lt;br /&gt;
For drag and drop, dtrans is concerned (Pasteboard Manager implementation)&lt;br /&gt;
&lt;br /&gt;
[FIXME]: Filepicker? Apple Spellchecker?&lt;br /&gt;
&lt;br /&gt;
[[User:Ericb|Ericb]] 11:39, 3 June 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;How will the new implementation be tested?==&lt;br /&gt;
&lt;br /&gt;
Currently, all openOffice.org code can be compiled without using the Xlib. but of course, a lot of features are missing,&lt;br /&gt;
&lt;br /&gt;
and the final package simply won&amp;#039;t work&lt;br /&gt;
&lt;br /&gt;
In vcl module&amp;quot;, a &amp;#039;&amp;#039;&amp;#039;toy&amp;#039;&amp;#039;&amp;#039; called svdem is built at buildtime. This binary is linked to libvcl* and so all new stuff can be tested.&lt;br /&gt;
&lt;br /&gt;
e.g. : draw anti-aliased lines works well. &lt;br /&gt;
&lt;br /&gt;
Everything implemented in aqua vcl code will be included in libvclplug_aqua, and svdem source code will contain a specific part to proceed tests.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;messagebox cleanup metadata&amp;quot; style=&amp;quot;border:1px solid blue;background-color:#B3FFF5;padding:7px;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;The magic is: when all needed features will work with svdem, it will work in the new version of OpenOffice.org !!&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[FIXME]: add more complete list of features to implement and test.&lt;br /&gt;
&lt;br /&gt;
== AquaVCL 01 cws ==&lt;br /&gt;
&lt;br /&gt;
[[http://qa.openoffice.org/issues/buglist.cgi?keywords=aqua Top 10 of Aqua issues]]&lt;br /&gt;
&lt;br /&gt;
[[Aquavcl01 tasks]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Changelog ===&lt;br /&gt;
&lt;br /&gt;
====Work in progresss : alpha 0.6 ====&lt;br /&gt;
&lt;br /&gt;
Started (19th March ) : &lt;br /&gt;
&lt;br /&gt;
Michael Sicotte proposed to investigate in timers, and continue [[http://www.openoffice.org/issues/show_bug.cgi?id=75228 Pavel&amp;#039;s work]] : objective is to replace obsolete code.  ( 23th March)&lt;br /&gt;
&lt;br /&gt;
[experimental] plipli proposed a patch for a new salframe implementation, using HIView + optionally compositing  (21th March )&lt;br /&gt;
&lt;br /&gt;
[commit scheduled] Michael Sicotte proposed a complete patch for invert() ( SAL_INVERT SAL_INVERT_50 and SAL_INVERT_TRACKFRAME )  (20th March )&lt;br /&gt;
&lt;br /&gt;
Tino proposed to work on code cleanup in salatsuifontutils.cxx, removing obsolete code &lt;br /&gt;
&lt;br /&gt;
ismael and michael work on invert() + drawAlphaRect() &lt;br /&gt;
&lt;br /&gt;
Damien started to work on drawEPS() &lt;br /&gt;
&lt;br /&gt;
plipli and ericb work on refresh&lt;br /&gt;
&lt;br /&gt;
==== alpha 0.5====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Top 10 Summary :  7 issues over 10 are fixed or very close to be : &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;time to code review, tracing, and search for memory leaks&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[done] Unicode input in salframe ( ekato ) ( 19th March )&lt;br /&gt;
&lt;br /&gt;
[experimental, works partially] beginning of HIView + HIComboxes works (text still missing)  (ericb + plipli)  ( 14th March ) &lt;br /&gt;
&lt;br /&gt;
[done] replace NewRgn() in salframe (ericb (11th March )&lt;br /&gt;
&lt;br /&gt;
[experimental, but very interesting] Improved native windows ( ismael ) ( 7th March )&lt;br /&gt;
&lt;br /&gt;
====alpha 0.4==== &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[Informative]&amp;#039;&amp;#039;&amp;#039; build runs with Leopard 9A377a ( fheckl ) ( 7th March ) &lt;br /&gt;
&lt;br /&gt;
Refresh screen issues  (plipli) (4th to 10th March )&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[informative]&amp;#039;&amp;#039;&amp;#039;  plipli announced  progress with refresh screen issues  ( 28th February )&lt;br /&gt;
&lt;br /&gt;
[experimental, not yet commited] Proxy configuration from system ( pjanik)  ( 28th February )&lt;br /&gt;
&lt;br /&gt;
[done] highlighted native button ( pjanik)  ( 27th February ) &lt;br /&gt;
&lt;br /&gt;
Native File Picker works ( fheckl  / pjanik )  ( 23th February  )&lt;br /&gt;
&lt;br /&gt;
====alpha 0.3====&lt;br /&gt;
&lt;br /&gt;
Cursor does appear -&amp;gt; invert() + setting a setBlinkTime value in UpdateSettings()  (pjanik /ericb ) &lt;br /&gt;
&lt;br /&gt;
[done] mirroring negative images (ismael) + DrawAlphaBitmap() + CreateWithMask()&lt;br /&gt;
&lt;br /&gt;
pjanik patch for Focus Events &lt;br /&gt;
&lt;br /&gt;
[done] scrolling works ( pjanik ) (17th February )&lt;br /&gt;
&lt;br /&gt;
[done ] carret works ( plipli) (17th February )&lt;br /&gt;
&lt;br /&gt;
[done] checkbuttons fix for checkmarks  (ericb) ( 17th February )&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[Informative]&amp;#039;&amp;#039;&amp;#039; Pavel Janik propose to solve offScreen buffer using HIView ( 17th February ) &lt;br /&gt;
&lt;br /&gt;
[experimental, never commited] patch for macosxrc.txt use + UpdateSettings() use in salframe.cxx ( ericb ( 16th February )&lt;br /&gt;
&lt;br /&gt;
Michael Sicotte joined the Team ( 15th February )&lt;br /&gt;
&lt;br /&gt;
invert() : first try  (ericb)   ( 13th february )&lt;br /&gt;
&lt;br /&gt;
====alpha 0.2====&lt;br /&gt;
&lt;br /&gt;
[12th February 2007 ]&lt;br /&gt;
&lt;br /&gt;
[done] calc does not start : bug identified by tino , first workaround (ericb)   [[http://www.openoffice.org/issues/show_bug.cgi?id=73691 issue 73691]]&lt;br /&gt;
&lt;br /&gt;
[done] bitmaps in native popup menus (ismael)  &lt;br /&gt;
&lt;br /&gt;
[done]  replace obsolete code for HandleWindowPaintEvent(), newRgn() .. etc  (ericb)  (12th February)&lt;br /&gt;
&lt;br /&gt;
correct salatslayout patch (plipli)  ( 11th February)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[Informative]&amp;#039;&amp;#039;&amp;#039;  Michel Renon proposed a summary about his work on fonts issues&lt;br /&gt;
&lt;br /&gt;
[patch] Pavel fixed several menu crashes (09th February )&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[Informative]&amp;#039;&amp;#039;&amp;#039; : Pavel posted a mail about several crashes origin &lt;br /&gt;
 &lt;br /&gt;
patch for radioboxes and checkboxes ( ericb ) (9th February)&lt;br /&gt;
&lt;br /&gt;
first complete patch for salatslayout.cxx ( plipli) ( 9th February )&lt;br /&gt;
&lt;br /&gt;
[done] most important crashes fixed ( pjanik)  ( 09th february )&lt;br /&gt;
&lt;br /&gt;
Modified baseline for 2.2. : Mac OS X10.4 -&amp;gt; Aqua will be 10.4 and 10.5 compatible only ( ericb)&lt;br /&gt;
&lt;br /&gt;
first try with multi line sallayout (plipli )  ( 08th February )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Damien Duportal joined the Team ( 7th February ) &lt;br /&gt;
&lt;br /&gt;
[done] scrollbar changes (ericb )   ( 4th February )&lt;br /&gt;
&lt;br /&gt;
====alpha 0.1====&lt;br /&gt;
&lt;br /&gt;
create Top 10 of issues before alpha  3rd February 2007 :  See : [[http://porting.openoffice.org/mac/news/2007/20070203toptenbeforealpha.html Top 10 of issues]]&lt;br /&gt;
&lt;br /&gt;
[experimental, not commited] patch for TPT() implementation (ericb)  ( 2nd February 2007 )&lt;br /&gt;
&lt;br /&gt;
Pavel Janik proposed to implement TransformProcessType() ( 2nd February 2007 )&lt;br /&gt;
&lt;br /&gt;
[not commited] implement UpdateSettings()   (ericb)  &lt;br /&gt;
&lt;br /&gt;
Pavel Janik resynchronized aquavel01 cws  with m202  ( 2nd February 2007 )&lt;br /&gt;
&lt;br /&gt;
====alpha 0.03====&lt;br /&gt;
&lt;br /&gt;
Michel Renon joined the Team (1st February )&lt;br /&gt;
&lt;br /&gt;
[done] fix checkbuttons and radiobuttons issues: offsets, redrawing of the check marks ( ericb) &lt;br /&gt;
&lt;br /&gt;
[done] fix scrollbar buttons (implement correct methods to retrieve dimensions)&lt;br /&gt;
&lt;br /&gt;
[done] implement mapfiles for Mac OS X (Stephan Bergmann, Daniel Boelzle, Tino Rachui , Pavel Janik)&lt;br /&gt;
&lt;br /&gt;
====alpha 0.02====&lt;br /&gt;
&lt;br /&gt;
[done] modify libsalsystools.dylib to be correctly loaded with the bundle  (ericb, + pjanik)&lt;br /&gt;
&lt;br /&gt;
[done] add mouse drag events  ( pjanik )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====alpha 0.01====&lt;br /&gt;
&lt;br /&gt;
[done] add new feature for Aqua windows, to allow QuickTime player use( mox )&lt;br /&gt;
&lt;br /&gt;
[done] replace obsolete code in salframe.cxx with (ericb)&lt;br /&gt;
&lt;br /&gt;
[done] fix correct size for main window (GetOptimaWindowSize()  ) (ericb)&lt;br /&gt;
&lt;br /&gt;
[done] fix alpha channel in pixmaps (ismael)&lt;br /&gt;
&lt;br /&gt;
====alpha 0.0====&lt;br /&gt;
&lt;br /&gt;
[done] pushbutton where not correctly drawn (ericb)&lt;br /&gt;
&lt;br /&gt;
[done] fix missing mouse events  (pjanik)&lt;br /&gt;
&lt;br /&gt;
[done] fix nRepeat in text entry  (ssa)&lt;br /&gt;
&lt;br /&gt;
2nd Mac porters Meeting&lt;br /&gt;
&lt;br /&gt;
===Work in progress ===&lt;br /&gt;
&lt;br /&gt;
URGENT :&lt;br /&gt;
&lt;br /&gt;
Top of issues causing crashes : event issue when tips is enabled causes crashes ( well known window / handler  / window desctructor / event loop bug )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Salatsuifontutils :  replace old code, track leaks : tino&lt;br /&gt;
&lt;br /&gt;
[done] Bitmaps : ( isma87) &lt;br /&gt;
&lt;br /&gt;
[running]  Crashes : (tino, pjanik, ericb, isma87, plipli )&lt;br /&gt;
&lt;br /&gt;
[???] Drag and drop :   (vijay)&lt;br /&gt;
&lt;br /&gt;
[???] Printing   (ybart)  &lt;br /&gt;
&lt;br /&gt;
Florian Heckl proposed a subject for Google Summer of Code about native printing&lt;br /&gt;
&lt;br /&gt;
Drawing/ windowing ( plipli / ericb ) -&amp;gt; mainly refresh &lt;br /&gt;
&lt;br /&gt;
[done] Implement cursor &lt;br /&gt;
&lt;br /&gt;
[started] Native Controls   (ericb) &lt;br /&gt;
&lt;br /&gt;
[work in progress] partial multiline sallayout  (plipli )&lt;br /&gt;
&lt;br /&gt;
To do : &lt;br /&gt;
&lt;br /&gt;
(started, Oliver) - modify the tree to make the bundle start without hack ( issue fixed during buildtime) &lt;br /&gt;
&lt;br /&gt;
(started, Florian Heckl)  verify Native FilePicker implementation ( works , tested in Hamburg  )&lt;br /&gt;
&lt;br /&gt;
[done] Ismael Merzaq)  implement blit functions in salgdi  ( important fix:  probably apha version to be tested once done) &lt;br /&gt;
&lt;br /&gt;
[done] Sebastien Plisson- update the missing functions list ( fonts ... ask hdu &amp;amp; cl&lt;br /&gt;
&lt;br /&gt;
[started] ericb, Mox Soini, Sebastien Plisson, Tino Rachui, Pavel janik continue to replace obsolete code&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
fix crashes with menus  (started : tino )&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Sort of documentation about VCL around Native Mac OS X port&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Do we really need to understand how it works? ;-)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vcl content:&lt;br /&gt;
&lt;br /&gt;
ls -laR | wc -l&lt;br /&gt;
  1750&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; Uff 1750 files to analyse :-/&lt;br /&gt;
&lt;br /&gt;
Our purpose is to describe the vcl organisation. The content of vcl is so important, that at the begining, the content will looks a bit confused. e.g. class names ..etc have nothing to do, only description with words and sense, but this will need some time before we can understand everything.&lt;br /&gt;
&lt;br /&gt;
How analyse with more efficiency? After some months to anlalyse &amp;#039;&amp;#039;&amp;#039;&amp;quot;horizontaly&amp;quot;&amp;#039;&amp;#039;&amp;#039;, it appears that list all the content of a directory is not the solution. Of course, we learned a lot, but we now have to complete with &amp;#039;&amp;#039;&amp;#039;&amp;quot;orthogonal&amp;quot;&amp;#039;&amp;#039;&amp;#039; method (compared to the previous one). The first method wasn&amp;#039;t obviously not the good/best way to describe vcl.&lt;br /&gt;
 &lt;br /&gt;
[FIXME] a different approach (will ask confirmation to Philipp Lohman), could be a description of how it work in runtime. First define what an instance is, a frame, and what exactly is concerned by such &amp;quot;objects&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
With that, we can write a list of different objects all using the same scheme: empty boxes (means pure virtual methods and classes in generic libvvcl), really implemented in the specific part, and finally, the API &amp;quot;encapsulated&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The most difficult is to see where the API is used. But for all the parts, this is the same.&lt;br /&gt;
&lt;br /&gt;
Finally, &amp;#039;&amp;#039;&amp;#039;what is important is the design of vcl&amp;#039;&amp;#039;&amp;#039;. Which &amp;#039;&amp;#039;&amp;#039;patterns&amp;#039;&amp;#039;&amp;#039; are used? What are the dependencies, how works the stack for the events, how works the scheduler, the timers too is very important, even fundamental for Aqua implementation. Will have a look at gsl mailing list, and other resources. Probably everything is already (randomly) written somewhere.&lt;br /&gt;
&lt;br /&gt;
=== VCL organisation ===&lt;br /&gt;
&lt;br /&gt;
Thank&amp;#039;s to Philipp Lohmann for this short, but precise description:&lt;br /&gt;
&lt;br /&gt;
Basically vcl is divided in the system dependent and the system independent part. The interface between these two is mostly the Sal interface (every interface name Sal*: SalInstance, SalFrame, SalGraphics, SalPrinter, etc.).&lt;br /&gt;
&lt;br /&gt;
SalInstance is a factory that can create all the other abstracted interfaces of the system dependent part. It also provides the main loop SalInstance::Yield()&lt;br /&gt;
&lt;br /&gt;
SalFrame abstracts any kind of system window.&lt;br /&gt;
&lt;br /&gt;
SalVirtualDevice abstracts an offscreen window (e.g. a Pixmap on X11)&lt;br /&gt;
&lt;br /&gt;
SalPrinter and SalInfoPrinter abstract the system print queues where SalInfoPrinter is for querying and SalPrinter for actual printing.&lt;br /&gt;
&lt;br /&gt;
SalGraphics is an interface produced by either SalFrame, SalVirtualDevice or SalPrinter which is used for actual drawing operations (text, bitmaps, vector graphics)&lt;br /&gt;
&lt;br /&gt;
SalSound is for sound playing.&lt;br /&gt;
&lt;br /&gt;
SalBitmap provides memory for bitmap graphics as well as methods converting this memory to a system handle (e.g. a Pixmap on X11).&lt;br /&gt;
&lt;br /&gt;
SalOpenGL provides OpenGL functionality if available.&lt;br /&gt;
&lt;br /&gt;
SalTimer is an interface for periodically triggering the event queue (to timer implementation).&lt;br /&gt;
&lt;br /&gt;
SalI18NImeStatus handles how the status window of an Input Method Editor (IME) should display (this is mainly X11 specific).&lt;br /&gt;
&lt;br /&gt;
SalSystem has some system specific methods that did not belong anywhere else:-)&lt;br /&gt;
&lt;br /&gt;
Of all these there interfaces is at least one implementation per system (Windows, X11 or Mac). The Unix implementation also has a plugin concept to allow for integration of different native toolkits (currently gtk and Qt) which became necessary for the implementation of Native Widget Framework (NWF) to display controls like their normal desktop counterparts.&lt;br /&gt;
&lt;br /&gt;
Basically the independent part (what is beneath vcl/source directory) has generic methods for drawing, window handling and stuff which it brings into a suitable form and then delegates to the system specific implementation (located beneath vcl/win for Windows and vcl/unx for the X11 platforms).&lt;br /&gt;
&lt;br /&gt;
[[User:Ericb|Ericb]] 16:12, 1 July 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
===Sub-directories description ===&lt;br /&gt;
&lt;br /&gt;
==== &amp;#039;&amp;#039;&amp;#039;Organisation of vcl directories&amp;#039;&amp;#039;&amp;#039; ====&lt;br /&gt;
&lt;br /&gt;
[[Image:aquavcl_organisation_complete_02.jpg]]&lt;br /&gt;
&lt;br /&gt;
==== &amp;#039;&amp;#039;&amp;#039;Directories in vcl. Short description&amp;#039;&amp;#039;&amp;#039; ====&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; aqua &amp;#039;&amp;#039;&amp;#039;: The name Aqua means Apple look and feel, and is well known as [http://developer.apple.com/documentation/UserExperience/Conceptual/OSXHIGuidelines/XHIGIntro/chapter_1_section_1.html Aqua Human Interface Guidelines]. This look and feel means Mac OS X. The work was begun by (probably) P. luby, Dan Williams Herbert Duerr (most of fonts stuff) and Ed Peterlin. Currently in ruin, this directory does contain a lot of ideas to investigate. The most important part of needed changes for native version (3.0) will be done inside aqua dir inc: does contain all vcl relative includes [PART1]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; prj &amp;#039;&amp;#039;&amp;#039;: Does contain build.lst and d.lst build.lst give us dependencies: probably a lot for vcl, build 98th module over ~148. Everything graphical depends in vcl. &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; qa &amp;#039;&amp;#039;&amp;#039; does contain all quality assurancy stuff&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;source&amp;#039;&amp;#039;&amp;#039;: the most important:-) This directory contains common sources for all architectures and OS. Mainly: Windows, Unix: Linux , Mac OS X (X11), Solaris, including generic, kde and gtk plugins, and Aqua (Mac OS X without X11, work currently in progress). &lt;br /&gt;
&lt;br /&gt;
Depending on the OS and the architecture, binaries are built or not.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; test &amp;#039;&amp;#039;&amp;#039;: This directory does contain all the needed stuff for tests. As example, in qa/testdocuments, you&amp;#039;ll find three documents (one writer, one calc and one impress) for tests purpose. &lt;br /&gt;
Other available tests are about memcheck and persistent window state. &lt;br /&gt;
 &lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; unx &amp;#039;&amp;#039;&amp;#039;: this directory does contain all unixes stuff. We have to understand what is inside to implement aqua port. For example, a lot of classes/strutures and objects use Xlib calls we have to replace with Carbon/Cocoa call (at least at first time) for Mac OS X native port.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; win &amp;#039;&amp;#039;&amp;#039;: Doing Mac OS X native port, I first believed this directory was not interesting for us, but I was wrong: OpenOffice.org roots are inside this directory, and a lot of comments and resources are inside. Mainly interesting if Carbon is used.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;workben&amp;#039;&amp;#039;&amp;#039;: Does contain a toy called &amp;quot;svdem&amp;quot;. svdem is a binary, used for new implementations. For example, actual aqua development uses svdem intensively, to verify all important properties we need: &lt;br /&gt;
&lt;br /&gt;
- display a window first (al least ...:)) &lt;br /&gt;
&lt;br /&gt;
- close cleanly this window&lt;br /&gt;
&lt;br /&gt;
- display a point&lt;br /&gt;
&lt;br /&gt;
- trace a line&lt;br /&gt;
&lt;br /&gt;
- trace an area &lt;br /&gt;
&lt;br /&gt;
- superpose two areas doing some important graphical operations, (like xor),&lt;br /&gt;
&lt;br /&gt;
- display a character&lt;br /&gt;
&lt;br /&gt;
- display a menu. &lt;br /&gt;
&lt;br /&gt;
- intercept events correctly.&lt;br /&gt;
&lt;br /&gt;
[FIXME] add more tests&lt;br /&gt;
&lt;br /&gt;
[[User:Ericb|Ericb]] 13:21, 3 June 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Naming convention&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
* Class names start with upper case letters, to improve readability.&lt;br /&gt;
&lt;br /&gt;
* Implemented Class names are derived from the virtual classes but can of course take arbitrary names.&lt;br /&gt;
To increase readability, it&amp;#039;s recommended to closely follow the base class name.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Impl prefix: means Implementation details&amp;#039;&amp;#039;&amp;#039;. The concerned class or method or function is not used outside of this module, so no external code (or other libraries) can see it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[ Events types using Carbon API (Mac OS X): ]]&amp;#039;&amp;#039;&amp;#039; A lot of events have to be managed in runtime. Here is a short description&lt;br /&gt;
&lt;br /&gt;
- do not freeze because bad event loops&lt;br /&gt;
&lt;br /&gt;
- event types implementation: currently, they are defined in vcl/aqua/inc/aquavclevents.hxx&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Apart: exact sense of hedabu? -&amp;gt; [FIXME] as far as I understood it: it is like &amp;quot;copy&amp;quot; to deliver software into the solver, with extra magic. The header files for example are manipulated so paths need not be exact. &amp;quot;headabu&amp;quot; is supposed to disappear little by little.&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;What do we have to build in vcl?&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
Two libraries, corresponding ressources (localized) and a toy so called « svdem »&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Common part&amp;#039;&amp;#039;&amp;#039;: &lt;br /&gt;
&lt;br /&gt;
in grey on right. The result will be a non architecture dependant library, built in all cases: for instance, libvcl680mxi.dylib on Mac Intel.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Specific part  &amp;quot; a plugin &amp;quot; &amp;#039;&amp;#039;&amp;#039;: &lt;br /&gt;
&lt;br /&gt;
Light yellow: aqua part will only concern Mac OS X (non X11) the name will probably be libvcl_aqua680mxi.dylib &lt;br /&gt;
&lt;br /&gt;
As you can see, win means windows part, in blue&lt;br /&gt;
&lt;br /&gt;
For Unix build (Linux, Solaris or current Mac OS X X11), in purple.&lt;br /&gt;
&lt;br /&gt;
Result will be:&lt;br /&gt;
&lt;br /&gt;
libvclplug_PLUGIN680mxi.DLLSUFFIX , where PLUGIN can be iether gen (generic) or gtk (using gtk+) or kde (using qt), and DLLSUFFIX can be either .so (linux) or .dylib (Mac OS X) ...etc (I&amp;#039;m not sure for other cases).&lt;br /&gt;
&lt;br /&gt;
Example: libvcl680mxi.dylib and libvclplug_aqua680mxi.dylib&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;In runtime&amp;#039;&amp;#039;&amp;#039;, libvclplug_aqua will be linked to libvcl680. the first one will contain the real implementation (respecting the API, e.g. Carbon) while the generic libvcl will only contain pure virtual methods ...etc like &amp;quot;empty boxes&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Current Aqua content ===&lt;br /&gt;
&lt;br /&gt;
A more complete description of aqua (Mac OS X / no X11 specific): [[Image:Vcl_aqua_organisation_02_tree.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==EXISTING objects to build in aqua==&lt;br /&gt;
&lt;br /&gt;
===Sal APP &amp;quot;everything application&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
[FIXME] add all objects descriptions&lt;br /&gt;
&lt;br /&gt;
==== saldata ====&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Defined in plugin exclusively&amp;#039;&amp;#039;&amp;#039; (i.e. for headers)&lt;br /&gt;
&lt;br /&gt;
Unix: unx/source/app/saldata.cxx (header in unx/inc)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Aqua: aqua/source/app/saldata.cxx (header in win/inc)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Windows: win/source/app/saldata.cxx (header in aqua/inc)&lt;br /&gt;
&lt;br /&gt;
* Role: saldata contains various kind of data used by the implementation for the concerned platform. &amp;#039;&amp;#039;&amp;#039;It is a bunch of global data collections reserved for the platform&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
It is just completely platform dependent, and nobody except this plugin can see it.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Saldata is something like a &amp;quot;second sal&amp;quot;, but providing an abstraction regarding windowing and graphics&amp;#039;&amp;#039;&amp;#039;, while SAL module provides an abstraction more Operating System oriented) &lt;br /&gt;
&lt;br /&gt;
e.g. : have a look at XRequest array in vcl/unx/source/app/saldata.cxx =&amp;gt; all calls are for Xlib (X11).  Ok, useless there, but interesting:-)&lt;br /&gt;
&lt;br /&gt;
[FIXME]: use Windows implementation could be a good starting point. Nothing is the same, but the current aquavcl cws uses similar objects, and it works very correctly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
saldatax.cxx uses classes SalInstance, SalObject, SalFrame, SalVirtualDevice, SalPrinter and fontList.&lt;br /&gt;
&lt;br /&gt;
Current list of possible objects who can be instantiated/released:&lt;br /&gt;
&lt;br /&gt;
structure SalData: does contain pointers on all kind of objects from other classes used in saldata.&lt;br /&gt;
&lt;br /&gt;
inline functions: [FIXME]: complete the description&lt;br /&gt;
&lt;br /&gt;
- SetSalData:&lt;br /&gt;
- GetSalData:&lt;br /&gt;
- GetAppSalData:&lt;br /&gt;
&lt;br /&gt;
==== salinst ====&lt;br /&gt;
&lt;br /&gt;
=&amp;gt; implemented in vcl/aqua/source/app/salinst.cxx&lt;br /&gt;
&lt;br /&gt;
Role: &lt;br /&gt;
&lt;br /&gt;
* get environment, mutexes, instantiate AquaSalInstance (Ctor, Dtor),&lt;br /&gt;
&lt;br /&gt;
* instantiates/releases a lot of other objects using Get() / CreateObject() / DestroyObject() methods.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Current list of possible objects who can be instantiated/released:&lt;br /&gt;
&lt;br /&gt;
 * VirtualDevice [FIXME]: exact role?&lt;br /&gt;
&lt;br /&gt;
 *Printer  &lt;br /&gt;
&lt;br /&gt;
- GetDefaultPrinter/ CreatePrinter() / DestroyPrinter - what a name ;-) -&lt;br /&gt;
&lt;br /&gt;
- InfoPrinter (Get/Create/Delete)&lt;br /&gt;
&lt;br /&gt;
- PrinterQueue (DeletePrinterQueueInfo / GetPrinterQueueInfo / GetPrinterQueueState)&lt;br /&gt;
&lt;br /&gt;
 * System (Create / Delete) [FIXME]: what means system here?&lt;br /&gt;
&lt;br /&gt;
 * Events: &lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::SetEventCallback()&lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::SetErrorEvenCallback()&lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::GetConnectionIdentifier()&lt;br /&gt;
&lt;br /&gt;
 * Menu / MenuItem: &lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::CreateMenu() / same for DestroyMenu()&lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::CreateMenuItem / same DestroyMenuItem()&lt;br /&gt;
&lt;br /&gt;
 * Sound: &lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::CreateSalSound()  =&amp;gt; object to a pointer of SalSound type&lt;br /&gt;
&lt;br /&gt;
Note: AquaSalInstance::DestroySalSound is not implemented (?)&lt;br /&gt;
&lt;br /&gt;
 * Timer: CreateTimer() /&lt;br /&gt;
&lt;br /&gt;
AquaSalInstance:: DestroyTimer() is not yet implemented (?)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Class MacImeStatus: inherits of SalI18NImeStatus&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; only there to see if there is a window to toggle into menubar [FIXME]??&lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::CreateI18NImeStatus(): instantiates MacImeStatus&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;For futher informations, see: &amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;[[Content of salinst.cxx]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
([[User:Ericb|Ericb]] 16:11, 20 May 2006 (CEST) )&lt;br /&gt;
&lt;br /&gt;
==== salmain ====&lt;br /&gt;
&lt;br /&gt;
Role: if possible, runs the standard vcl application code SVMain()&lt;br /&gt;
&lt;br /&gt;
([[User:Ericb|Ericb]] 16:15, 20 May 2006 (CEST))&lt;br /&gt;
&lt;br /&gt;
==== salsound ====&lt;br /&gt;
&lt;br /&gt;
==== salsys ====&lt;br /&gt;
&lt;br /&gt;
==== saltimer ====&lt;br /&gt;
&lt;br /&gt;
==== saltimer ====&lt;br /&gt;
&lt;br /&gt;
The main problem with SalTimer is the code we use is obsolete. To remove this deprecated code, sevarl work have been tried &lt;br /&gt;
&lt;br /&gt;
1) Pavel Janik, in issue 75228 &lt;br /&gt;
&lt;br /&gt;
works, but a serious problem is remaining (a thread issue, nothing anybody explained yet) &lt;br /&gt;
&lt;br /&gt;
2) eric bacahrd ( code will be attached soon )&lt;br /&gt;
&lt;br /&gt;
3) Michael Sicotte, who proposed to work on that, and continue Pavel implementation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SalTimer description&lt;br /&gt;
&lt;br /&gt;
AquaSalTimerproc&lt;br /&gt;
&lt;br /&gt;
AquaSalTimer::Start()&lt;br /&gt;
&lt;br /&gt;
AquaSalTimer::Stop()&lt;br /&gt;
&lt;br /&gt;
AquaSalTimer::Restart()&lt;br /&gt;
&lt;br /&gt;
AquaSalTimer::Installtask()   // yet needed ?&lt;br /&gt;
&lt;br /&gt;
=== Sal GDI (everything Graphical Display Interface) ===&lt;br /&gt;
&lt;br /&gt;
====salgdinativewidgets====&lt;br /&gt;
&lt;br /&gt;
[[native controls]]&lt;br /&gt;
&lt;br /&gt;
==== salatslayout ====&lt;br /&gt;
&lt;br /&gt;
==&amp;gt; implemented in vcl/aqua/source/gdi/salatslayout.cxx&lt;br /&gt;
&lt;br /&gt;
- Handle text layouting :&lt;br /&gt;
&lt;br /&gt;
    * Use ATSUI (ATSUCreateTextLayoutFromPtr) to layout the text unicode char buffer&lt;br /&gt;
    * Use ATSUI (ATSU..) to get informations about glyphs&lt;br /&gt;
    * Populate different arrays (mpGlyph2Chars, mpChars2Glyph, mpCharsWidths, mpGlyphAdvances)&lt;br /&gt;
      that are used in various methods.&lt;br /&gt;
&lt;br /&gt;
==== salatsuiutils ====&lt;br /&gt;
&lt;br /&gt;
==== salfontutils ====&lt;br /&gt;
&lt;br /&gt;
==== salmathutils ====&lt;br /&gt;
&lt;br /&gt;
==== sal bmp ====&lt;br /&gt;
&lt;br /&gt;
==== salvd ====&lt;br /&gt;
&lt;br /&gt;
==== salpixmaputils====&lt;br /&gt;
&lt;br /&gt;
==== salprn ====&lt;br /&gt;
&lt;br /&gt;
====salrectangle====&lt;br /&gt;
&lt;br /&gt;
==== salvd ====&lt;br /&gt;
&lt;br /&gt;
=== Sal Window===&lt;br /&gt;
&lt;br /&gt;
==== salframe ====&lt;br /&gt;
Documentation in progress, from damiend :&lt;br /&gt;
[[User:Damiend|Damiend page]]&lt;br /&gt;
&lt;br /&gt;
====salobj====&lt;br /&gt;
&lt;br /&gt;
== TO BE IMPLEMENTED (missing in Aqua)==&lt;br /&gt;
&lt;br /&gt;
===Audio===&lt;br /&gt;
&lt;br /&gt;
====audioconvert====&lt;br /&gt;
 (obsolete?) &lt;br /&gt;
&lt;br /&gt;
====devaudio====&lt;br /&gt;
(obsolete?)&lt;br /&gt;
&lt;br /&gt;
====native sound====&lt;br /&gt;
&lt;br /&gt;
====salimpsound====&lt;br /&gt;
&lt;br /&gt;
====vsound====&lt;br /&gt;
&lt;br /&gt;
===i18n===&lt;br /&gt;
&lt;br /&gt;
===keysymnames===&lt;br /&gt;
&lt;br /&gt;
===saldisp===&lt;br /&gt;
&lt;br /&gt;
===sm===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[FIXME]: is session manager usefull?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Native Controls&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
====Scrollbar====&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Works as expected&amp;#039;&amp;#039;&amp;#039;. The most important work is done&lt;br /&gt;
&lt;br /&gt;
See : [[Mac_OS_X_Porting_-_Native_Controls#ScrollBar]]&lt;br /&gt;
&lt;br /&gt;
====DrawThemeButton() documentation====&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Started&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
See : [[Mac_OS_X_Porting_-_Native_Controls#ComboBox]]&lt;br /&gt;
&lt;br /&gt;
Started&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DrawThemeButton&lt;br /&gt;
Draws a button.&lt;br /&gt;
&lt;br /&gt;
OSStatus DrawThemeButton (&lt;br /&gt;
   const Rect * inBounds,&lt;br /&gt;
   ThemeButtonKind inKind,&lt;br /&gt;
   const ThemeButtonDrawInfo * inNewInfo,&lt;br /&gt;
   const ThemeButtonDrawInfo * inPrevInfo,&lt;br /&gt;
   ThemeEraseUPP inEraseProc,&lt;br /&gt;
   ThemeButtonDrawUPP inLabelProc,&lt;br /&gt;
   UInt32 inUserData&lt;br /&gt;
);&lt;br /&gt;
Parameters&lt;br /&gt;
inBounds&lt;br /&gt;
A pointer to a structure of type Rect. Pass a rectangle specifying the boundary of the button, in local coordinates.&lt;br /&gt;
&lt;br /&gt;
inKind&lt;br /&gt;
A value of type ThemeButtonKind. Pass a constant specifying the type of button to draw. &lt;br /&gt;
See “Theme Buttons” for descriptions of possible values.&lt;br /&gt;
&lt;br /&gt;
inNewInfo&lt;br /&gt;
A pointer to a structure of type ThemeButtonDrawInfo. Before calling DrawThemeButton, &lt;br /&gt;
set the structure to contain the new state, value, and adornment for the button. &lt;br /&gt;
DrawThemeButton uses the information passed in the inNewInfo and inPrevInfo parameters&lt;br /&gt;
to apply transitional animation or sound effects as the button state changes, if such are &lt;br /&gt;
specified under the current theme.&lt;br /&gt;
&lt;br /&gt;
inPrevInfo&lt;br /&gt;
A pointer to a structure of type ThemeButtonDrawInfo. If the button state is changing,&lt;br /&gt;
set the structure to contain the previous state, value, and adornment for the button, &lt;br /&gt;
to allow DrawThemeButton to apply any transitional effects. If the button state is not &lt;br /&gt;
changing, you can pass NULL.&lt;br /&gt;
&lt;br /&gt;
inEraseProc&lt;br /&gt;
A value of type ThemeEraseUPP. If you have a custom background, use this parameter to pass&lt;br /&gt;
a universal function pointer to an application-defined function such as that described in &lt;br /&gt;
ThemeEraseProcPtr. DrawThemeButton calls this function to erase the background before drawing&lt;br /&gt;
 the button. If you pass NULL, DrawThemeButton&amp;#039;s default behavior is to erase the background&lt;br /&gt;
 for you.&lt;br /&gt;
&lt;br /&gt;
inLabelProc&lt;br /&gt;
A value of type ThemeButtonDrawUPP. If you pass a universal function pointer to an &lt;br /&gt;
application-defined function such as that described in ThemeButtonDrawProcPtr, DrawThemeButton&lt;br /&gt;
 calls that function to draw the label of the button. If you pass NULL, no label is drawn.&lt;br /&gt;
&lt;br /&gt;
inUserData&lt;br /&gt;
An unsigned 32-bit integer. Provide any data to be passed in to the callback functions specified in &lt;br /&gt;
the inLabelProc and inEraseProc parameters. Pass NULL if you do not wish to provide any data.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
A result code. See “Appearance Manager Result Codes”.&lt;br /&gt;
&lt;br /&gt;
Discussion&lt;br /&gt;
The DrawThemeButton function draws a theme-compliant button. If a ThemeEraseProcPtr is &lt;br /&gt;
specified in the inEraseProc parameter, DrawThemeButton uses that function to erase the &lt;br /&gt;
background of the button before drawing the button. After the button is drawn, if a&lt;br /&gt;
ThemeButtonDrawProcPtr is specified in the inLabelProc parameter, DrawThemeButton calls&lt;br /&gt;
that function to draw the button’s label.&lt;br /&gt;
&lt;br /&gt;
Note that DrawThemeButton also draws any appearance adornments for the button and that these&lt;br /&gt;
can extend beyond the button’s basic bounding rectangle, as specified in the inBounds parameter,&lt;br /&gt;
and may be of variable shape. You may therefore wish to call the function&lt;br /&gt;
GetThemeButtonBackgroundBounds to obtain the actual rectangle containing the pixels belonging&lt;br /&gt;
to a button under the current theme.&lt;br /&gt;
&lt;br /&gt;
Version Notes&lt;br /&gt;
This function is available with Appearance Manager 1.1 and later.&lt;br /&gt;
&lt;br /&gt;
Availability&lt;br /&gt;
Available in CarbonLib 1.0 and later when Appearance 1.1 or later is present.&lt;br /&gt;
Available in Mac OS X 10.0 and later.&lt;br /&gt;
Declared In&lt;br /&gt;
Appearance.h&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====HIComboBoxCreate() documentation====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HIComboBoxCreate&lt;br /&gt;
Creates a combo box control.&lt;br /&gt;
&lt;br /&gt;
OSStatus HIComboBoxCreate (&lt;br /&gt;
   const HIRect* boundsRect,&lt;br /&gt;
   CFStringRef text,&lt;br /&gt;
   const ControlFontStyleRec* style,&lt;br /&gt;
   CFArrayRef list,&lt;br /&gt;
   OptionBits inAttributes,&lt;br /&gt;
   HIViewRef* outComboBox&lt;br /&gt;
);&lt;br /&gt;
Parameters&lt;br /&gt;
boundsRect&lt;br /&gt;
The bounding box of the control.&lt;br /&gt;
&lt;br /&gt;
text&lt;br /&gt;
The default text in the editable portion of the control. Can be NULL.&lt;br /&gt;
&lt;br /&gt;
style&lt;br /&gt;
The font style of the both editable text and the text in the disclosure list. Can be NULL.&lt;br /&gt;
&lt;br /&gt;
list&lt;br /&gt;
The default values available in the disclosure list. Can be NULL.&lt;br /&gt;
&lt;br /&gt;
inAttributes&lt;br /&gt;
The default attributes of the combo box. For possible values, see “Combo Box Attributes”.&lt;br /&gt;
&lt;br /&gt;
outComboBox&lt;br /&gt;
On exit, a pointer to a reference for the new control.&lt;br /&gt;
&lt;br /&gt;
Discussion&lt;br /&gt;
The combo box can be used in compositing mode, as well as traditional Control Manager mode.&lt;br /&gt;
When created, this view is invisible. To see the view, you must show the view by calling HIViewSetVisible.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== What is used for Linux, Windows, Mac OS X ...build ? ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[Description of the dependencies]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[Windows]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[MacOS X]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[Linux]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[Solaris]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Content of Aqua ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[Click here to see the complete list]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Content of vcl/inc&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Notes: &lt;br /&gt;
&lt;br /&gt;
1) Where to find includes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;foo/bar.hxx&amp;gt; means you can find bar.hxx in the foo module. The new style file is foo/inc/foo/bar.hxx, old style is foo/inc/bar.hxx and sometimes the file is somewhere else in the tree or generated. The deliver process copies/generates the file into solver at solver/680/build_type/inc/foo. Good for fixing broken builds. ;-)&lt;br /&gt;
&lt;br /&gt;
2) &lt;br /&gt;
suffix .h (for C calls or first version?) or .hxx (C++) &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;A) Family of includes&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
Looking more closely at the list brings to the fore (expression from dictionary ;-) ) that include names are&lt;br /&gt;
informatives. Most of the time, the name gives the function/role.&lt;br /&gt;
What is interesting is the files with name begining with &amp;quot;sal&amp;quot;. sal means System Abstraction Layer + include&amp;#039;s function (or explicit name). &lt;br /&gt;
&lt;br /&gt;
Partial list, for example:&lt;br /&gt;
&lt;br /&gt;
salatype.hxx&lt;br /&gt;
&lt;br /&gt;
salbmp.hxx&lt;br /&gt;
&lt;br /&gt;
salctrlhandle.hxx&lt;br /&gt;
&lt;br /&gt;
salctype.hxx&lt;br /&gt;
&lt;br /&gt;
salframe.hxx&lt;br /&gt;
&lt;br /&gt;
salgdi.hxx&lt;br /&gt;
&lt;br /&gt;
salgeom.hxx&lt;br /&gt;
&lt;br /&gt;
sallayout.hxx (main header for fonts services)&lt;br /&gt;
...&lt;br /&gt;
salmenu&lt;br /&gt;
salnativewidgets&lt;br /&gt;
...etc&lt;br /&gt;
&lt;br /&gt;
Other important families are &amp;quot;sv&amp;quot; and &amp;quot;uno&amp;quot; or &amp;quot;win&amp;quot; (window) prefixed. sal family will be analysed apart.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;B) Includes of includes&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Some includes are more important than other. To prove this, just have a look is sufficient: some are always needed, and some more rarely.&lt;br /&gt;
&lt;br /&gt;
To verify, a simple test to do in vcl/inc:&lt;br /&gt;
&lt;br /&gt;
egrep -H &amp;quot;#include&amp;quot; ./* | wc -l  gives me 681 lines ! And some of them are the same...&lt;br /&gt;
&lt;br /&gt;
To know more, the precedent command line can be modified to make appear the numerous call &lt;br /&gt;
to the same includes files.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
egrep -H &amp;quot;#include&amp;quot; ./* | cut -d&amp;quot;#&amp;quot; -f2 | sort &amp;gt; liste.txt&lt;br /&gt;
&lt;br /&gt;
The content of liste.txt is explicit: dllapi.h, sv.h and some other are very important, while some other includes are only one or two times used. We can see too that vos includes are numerous, even if vos is deprecated**&lt;br /&gt;
&lt;br /&gt;
 **see http://wiki.services.openoffice.org/wiki/Source_code_directories&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I&amp;#039;m nearly sure that a complete analysis of just this result will give us a lot of information.&lt;br /&gt;
&lt;br /&gt;
I propose to change the order of analysis starting with dllapi.h and sv.h.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[to be continued]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;B1) &amp;quot;sal&amp;quot; includes family&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
[[salinst.hxx]] This seems to be the main include file&lt;br /&gt;
&lt;br /&gt;
[[salatype.hxx]]&lt;br /&gt;
&lt;br /&gt;
[[salctrlhandle.hxx]]&lt;br /&gt;
&lt;br /&gt;
[[salctype.hxx]]&lt;br /&gt;
&lt;br /&gt;
[[salframe.hxx]]&lt;br /&gt;
&lt;br /&gt;
[[salgdi.hxx]]&lt;br /&gt;
&lt;br /&gt;
[[salgeom.hxx]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[ sallayout.hxx ]]&amp;#039;&amp;#039;&amp;#039; &amp;lt;-- see Native Fonts implementation&lt;br /&gt;
&lt;br /&gt;
[[salgtype.hxx]]&lt;br /&gt;
&lt;br /&gt;
[[vcl/inc/salobj.hxx]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;B2) Classicals includes&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
file: abstdlg.hxx [ means abstract dialog ]&lt;br /&gt;
&lt;br /&gt;
This includes does contain the following classes definitions:&lt;br /&gt;
&lt;br /&gt;
[FIXME] : choose a precise presentation template for classes &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
VclAbstractDialog,&lt;br /&gt;
&lt;br /&gt;
VclAbstractTerminateDialog, &lt;br /&gt;
&lt;br /&gt;
VclAbstractRefreshableDialog,&lt;br /&gt;
 &lt;br /&gt;
VclAbstractDialogFactory, &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
uses &amp;lt;tools/solar.h&amp;gt; , &amp;lt;tools/string.hxx&amp;gt; + &lt;br /&gt;
&lt;br /&gt;
&amp;quot;dllapi.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Note : dllapi.h is very interesting because when we have to find (for example) a library suffix, SAL_DLLEXTENSSION can replace all suffixes (every OS&amp;#039;s and archs). Just including sal/config.h does it ! &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Classes:&lt;br /&gt;
&lt;br /&gt;
Window -&amp;gt; what? [FIXME]&lt;br /&gt;
ResId -&amp;gt; what?&lt;br /&gt;
&lt;br /&gt;
Does contain the prototype of VclAbstractDialog, inherit of VCL_DLLPUBLIC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
file: dllapi.h [ dll for dynamic linked library ]&lt;br /&gt;
Uses: &amp;lt;sal/config.h&amp;gt; and &amp;gt;sal/types/h&amp;gt;&lt;br /&gt;
includes: VCL_DLLPUBLIC macro&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
file: accel.h [ means accelerator ]&lt;br /&gt;
&lt;br /&gt;
Classes:&lt;br /&gt;
&lt;br /&gt;
Accelerator &lt;br /&gt;
{&lt;br /&gt;
}&lt;br /&gt;
ImplAccelEntry &lt;br /&gt;
{&lt;br /&gt;
public members: &lt;br /&gt;
&lt;br /&gt;
Names&lt;br /&gt;
&lt;br /&gt;
mnId&lt;br /&gt;
maKeyCode&lt;br /&gt;
mpAccel&lt;br /&gt;
mpAutoAccel&lt;br /&gt;
mbEnabled&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function / returns / parameters&lt;br /&gt;
&lt;br /&gt;
ImplGetKeyCode / void / KeyFuncType eFunc, ref rCode1 , ref rCode2, ref rCode3&lt;br /&gt;
&lt;br /&gt;
file: accel.hxx &lt;br /&gt;
&lt;br /&gt;
Uses: &amp;lt;sv.h&amp;gt; , &amp;quot;dllapi.h&amp;quot; ,&amp;lt;tools/resid.hxx&amp;gt;, &amp;lt;&amp;lt;tools/rc.hxx&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Classes:&lt;br /&gt;
&lt;br /&gt;
ImplAccelData;&lt;br /&gt;
ImplAccelEntry;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Important Links ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[Progressive implementation]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Native Font server Implementation&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;[[Mac OS X Porting - Native Fonts]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Native Sound Implementation&amp;#039;&amp;#039;&amp;#039;: [[Mac OS X Porting - Native Audio and Video]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Native Printing Implementation&amp;#039;&amp;#039;&amp;#039;: [[Mac OS X Porting - Native_Printing]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Drag and Drop implementation&amp;#039;&amp;#039;&amp;#039;: [[Mac OS X Porting - Native Drag and drop]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Data Acquisition&amp;#039;&amp;#039;&amp;#039; : [[Mac OS X Porting - Data Acquisition]]&lt;br /&gt;
&lt;br /&gt;
This work is part of http://wiki.services.openoffice.org/wiki/Mac_OS_X_Porting_-_Work_Areas/Todo%27s&lt;br /&gt;
&lt;br /&gt;
[to be continued:-) ]&lt;br /&gt;
&lt;br /&gt;
== Keyboard comparizon between OpenOffice.org / Mac OS X  application ==&lt;br /&gt;
&lt;br /&gt;
[FIXME] redo a cleanest array &lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;vertical-align:top; text-align:centered; background-color:#F0F0F0;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#99CCFF; font-weight:bold;&amp;quot; &lt;br /&gt;
| Modifier||+ key  || Result || TextEdit  returns&lt;br /&gt;
|-&lt;br /&gt;
|ALT|| a||æ ||æ &lt;br /&gt;
|-&lt;br /&gt;
|ALT||b||ß ||ß&lt;br /&gt;
|-&lt;br /&gt;
|ALT||c||© ||©&lt;br /&gt;
|-&lt;br /&gt;
|ALT||d||∂ ||∂&lt;br /&gt;
|-&lt;br /&gt;
|ALT||e||ê ||ê&lt;br /&gt;
|-&lt;br /&gt;
|ALT||f||ƒ ||ƒ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||g ||ﬁ ||ﬁ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||h ||Ì ||Ì&lt;br /&gt;
|-&lt;br /&gt;
|ALT||i ||î ||î&lt;br /&gt;
|-&lt;br /&gt;
|ALT||j ||Ï ||Ï&lt;br /&gt;
|-&lt;br /&gt;
|ALT||k ||È ||È&lt;br /&gt;
|-&lt;br /&gt;
|ALT||l ||¬ ||¬&lt;br /&gt;
|-&lt;br /&gt;
|ALT||m ||µ ||µ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||n ||~ ||~&lt;br /&gt;
|-&lt;br /&gt;
|ALT||o ||œ ||œ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||p ||π ||π&lt;br /&gt;
|-&lt;br /&gt;
|ALT||q ||‡ ||‡&lt;br /&gt;
|-&lt;br /&gt;
|ALT||r ||® ||®&lt;br /&gt;
|-&lt;br /&gt;
|ALT||s ||Ò ||Ò&lt;br /&gt;
|-&lt;br /&gt;
|ALT||t ||† ||†&lt;br /&gt;
|-&lt;br /&gt;
|ALT||u ||º ||º&lt;br /&gt;
|-&lt;br /&gt;
|ALT||v ||◊ ||◊&lt;br /&gt;
|-&lt;br /&gt;
|ALT||w ||‹ ||‹&lt;br /&gt;
|-&lt;br /&gt;
|ALT||x ||≈ ||≈&lt;br /&gt;
|-&lt;br /&gt;
|ALT||y ||Ú ||Ú&lt;br /&gt;
|-&lt;br /&gt;
|ALT||z ||Â ||Â&lt;br /&gt;
|-&lt;br /&gt;
|ALT||A ||Æ ||Æ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||B ||∫ ||∫&lt;br /&gt;
|-&lt;br /&gt;
|ALT||C ||¢ ||¢&lt;br /&gt;
|-&lt;br /&gt;
|ALT||D||∆||∆&lt;br /&gt;
|-&lt;br /&gt;
|ALT||F ||· ||·&lt;br /&gt;
|-&lt;br /&gt;
|ALT||G ||ﬂ ||ﬂ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||H ||Î ||Î&lt;br /&gt;
|-&lt;br /&gt;
|ALT||I ||Î ||Î&lt;br /&gt;
|-&lt;br /&gt;
|ALT||J ||Í ||Í&lt;br /&gt;
|-&lt;br /&gt;
|ALT||K ||Ë ||Ë&lt;br /&gt;
|-&lt;br /&gt;
|ALT||L || &amp;lt;pre&amp;gt;|&amp;lt;/pre&amp;gt; ||&amp;lt;pre&amp;gt;|&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|ALT||M ||Ó ||Ó&lt;br /&gt;
|-&lt;br /&gt;
|ALT||N ||ı ||ı&lt;br /&gt;
|-&lt;br /&gt;
|ALT||O ||Œ ||Œ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||P ||∏ ||∏&lt;br /&gt;
|-&lt;br /&gt;
|ALT||Q ||Ω ||Ω&lt;br /&gt;
|-&lt;br /&gt;
|ALT||R ||‚ ||‚&lt;br /&gt;
|-&lt;br /&gt;
|ALT||S ||∑ ||∑&lt;br /&gt;
|-&lt;br /&gt;
|ALT||T ||™ ||™&lt;br /&gt;
|-&lt;br /&gt;
|ALT||U ||ª ||ª&lt;br /&gt;
|-&lt;br /&gt;
|ALT||V ||√ ||√&lt;br /&gt;
|-&lt;br /&gt;
|ALT||W ||› ||›&lt;br /&gt;
|-&lt;br /&gt;
|ALT||X ||⁄ ||⁄&lt;br /&gt;
|-&lt;br /&gt;
|ALT||Y ||Ÿ ||Ÿ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||Z ||Å ||Å&lt;br /&gt;
|-&lt;br /&gt;
|ALT||$ ||€ ||€&lt;br /&gt;
|-&lt;br /&gt;
|ALT||` ||@ ||@&lt;br /&gt;
|-&lt;br /&gt;
|ALT||£ ||# ||#&lt;br /&gt;
|-&lt;br /&gt;
|ALT||* ||¥ ||¥&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Sous réserve d&amp;#039;erreur ou omission [[User:Ericb|Ericb]] 00:05, 14 January 2007 (CET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[User:Ericb|Ericb]] 15:00, 22 Jul 2005 (EDT)&lt;br /&gt;
&lt;br /&gt;
[[Category:Porting]]&lt;br /&gt;
[[Category:MacOSX]]&lt;br /&gt;
[[Category:Aqua]]&lt;/div&gt;</summary>
		<author><name>Plipli</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=User:Ericb&amp;diff=30797</id>
		<title>User:Ericb</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=User:Ericb&amp;diff=30797"/>
		<updated>2007-04-25T20:12:15Z</updated>

		<summary type="html">&lt;p&gt;Plipli: /* &amp;#039;&amp;#039;&amp;#039;Interesting Labs&amp;#039;&amp;#039;&amp;#039; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Public Documentation License Notice==&lt;br /&gt;
&lt;br /&gt;
The contents of this Documentation (excepted Native Port Roadmap),are subject to the Public Documentation License Version 1.0 (the &amp;quot;License&amp;quot;); you may only use this Documentation if you comply with the terms of this License. A copy of the License is available at http://www.openoffice.org/licenses/PDL.html.&lt;br /&gt;
The Original Documentation is &amp;quot;Mac OS X native port&amp;quot;. The Initial Writer of the Original Documentation is (JCA) Eric Bachard (C) 2005-2006. All Rights Reserved. (Initial Writer contact(s): ericb@openoffice.org.)&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Mac OS X Native port&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;messagebox cleanup metadata&amp;quot; style=&amp;quot;border:1px solid blue;background-color:#B3FFF5;padding:7px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;The first Mac OS X native port objective is make OpenOffice.org run without X11 use, to make it a real Mac application.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;The second one is respect Aqua Human interface Guidelines&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; This is a long term work, and every help and/or contributions, like donations** are welcome.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 **see http://contributing.openoffice.org/index.html&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Native Port Roadmap&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;2006&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
* June 2006: work in progress &lt;br /&gt;
&lt;br /&gt;
- Basis: frame, instances, threads, drawing, painting, resizing (Stephan Schaefer, Tino Rachui)&lt;br /&gt;
&lt;br /&gt;
 Done: &lt;br /&gt;
 implement threads&lt;br /&gt;
 create, manage instance&lt;br /&gt;
 create, manage windows (including parents)&lt;br /&gt;
 create, manage events&lt;br /&gt;
 create manage drawing, resizing&lt;br /&gt;
 create, add menus (Pavel Janik)&lt;br /&gt;
 toggle window fullscreen (Pierre de Filippis)&lt;br /&gt;
 make font server work (Stephan Schaefer)&lt;br /&gt;
&lt;br /&gt;
* Current status font support (Stephan Schaefer, 2006/07/28): the following features are basically working now&lt;br /&gt;
** font selection&lt;br /&gt;
** font size&lt;br /&gt;
** simple font attributes (bold, italic)&lt;br /&gt;
&lt;br /&gt;
 Next step: document first part, and propose design&lt;br /&gt;
&lt;br /&gt;
- native filepicker (Pavel Janik, Florian Heckl)&lt;br /&gt;
&lt;br /&gt;
- native printing implementation (Oliver?)&lt;br /&gt;
&lt;br /&gt;
- native font implementation (Eric Bachard)&lt;br /&gt;
&lt;br /&gt;
* September 2006: &lt;br /&gt;
&lt;br /&gt;
- first proofs of concept: fonts, filepicker .. (more?)&lt;br /&gt;
- show the results (OOoCon 2006?)&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;2007&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
* January 2007: first alpha implementation&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Strategy for native port&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Possible Actions&amp;#039;&amp;#039;&amp;#039;: &lt;br /&gt;
&lt;br /&gt;
Identify us:&lt;br /&gt;
&lt;br /&gt;
#Complete the arrays below&lt;br /&gt;
#Update photos on frapr.com?&lt;br /&gt;
&lt;br /&gt;
Share the work:&lt;br /&gt;
&lt;br /&gt;
#Divide the work between little Teams&lt;br /&gt;
#Update Todo list regularly -&amp;gt; needs some love these days ... [http://wiki.services.openoffice.org/wiki/Mac_OS_X_Porting_-_Work_Areas/Todo%27s]&lt;br /&gt;
&lt;br /&gt;
Help:&lt;br /&gt;
&lt;br /&gt;
#Teach tools between us&lt;br /&gt;
#Do a debug party on IRC&lt;br /&gt;
#write documentation&lt;br /&gt;
&lt;br /&gt;
Meet us:&lt;br /&gt;
&lt;br /&gt;
#IRC&lt;br /&gt;
#Mac Meeting (like nov2005 in Hamburg?)&lt;br /&gt;
&lt;br /&gt;
Inform:&lt;br /&gt;
&lt;br /&gt;
#Update website regularly&lt;br /&gt;
#Blogs&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;WHO&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
Mac Team:&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;vertical-align:top; text-align:left; background-color:#efefef;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#d6d6d6;font-weight:bold;&amp;quot; &lt;br /&gt;
|Developer \ skills || build || write code || code review || debug/trace (higher is better) || contribute to documentation ||&lt;br /&gt;
|-&lt;br /&gt;
|ericb|| x || x || || 1 || x ||&lt;br /&gt;
|-&lt;br /&gt;
|pjanik|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|ssa|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|maho|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|tinor|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|schmidtm|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|ebischoff|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|obr|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|cl|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|aliscafo|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|fheckl|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Fridrich|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|plipli|| || x || || || x ||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Other resources&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
fonts: ?&lt;br /&gt;
&lt;br /&gt;
events: ?&lt;br /&gt;
&lt;br /&gt;
QA: James McKenzie leads QA for the Mac OS X port of OpenOffice.org and is looking for volunteers to spread this effort over several people and needs people from all over the world to test various languages.&lt;br /&gt;
&lt;br /&gt;
graphical: ?&lt;br /&gt;
&lt;br /&gt;
Communication: ?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;WHAT&amp;#039;&amp;#039;&amp;#039;: Status of most important tasks&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;vertical-align:top; text-align:left; background-color:#efefef;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#d6d6d6;font-weight:bold;&amp;quot; &lt;br /&gt;
| Task || Names|| Urgency (1=higher)|| Work in Progress || Done || Code review || Debug || Integration || &lt;br /&gt;
|-&lt;br /&gt;
|Get rid of X11||done || 1 || x || x || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Bundle|| || 1 || x || || || || | ||&lt;br /&gt;
|-&lt;br /&gt;
|Drawing|| || 1 || x || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Fonts||plipli || 1 || x || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Events management|| || 2 || x || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Controls (see list) ||ericb, aliscafo || 2 || x || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Native FilePicker||Florian Heckl, Pavel Janik || 3 || x || x || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Native Printing||Yvan Barthelemy || 3 || x || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Native SpellChecker|| || 4 || || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Player||Mox Soini || 4 || x || || || || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Other tasks:&lt;br /&gt;
&lt;br /&gt;
Help for writing bug lists, status of bugs ..etc&lt;br /&gt;
&lt;br /&gt;
Write howto use gdb, leaks, other tools&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;WHEN&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
From Christian Lippka (last meeting, 25th of august 2006): &lt;br /&gt;
 Aug 26 00:21:38 ChristianL&lt;br /&gt;
 from my point of view what is missing for point 1:&lt;br /&gt;
 text layout, complete font support, keyboard support,&lt;br /&gt;
 fixing repaint issues, having aqua install and run out of the box&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;September 2006&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Present the current state of the project at the 2006 OpenOffice conference in Lyon and Paris&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Late 2006&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
fix OpenOffice.org launch&lt;br /&gt;
fix drawing (repainting)&lt;br /&gt;
Implement missing methods and fix most important bugs (mainly the one leading to crash) in:&lt;br /&gt;
ATS&lt;br /&gt;
Salgraphics&lt;br /&gt;
Salinstance&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;January or February 2007&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
make Java work (works partially)&lt;br /&gt;
make intensive debug&lt;br /&gt;
present something working as alpha&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;June 2007	&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Implementation of:&lt;br /&gt;
native filepicker&lt;br /&gt;
native printing&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Become a Domain Developer for Mac OS X port&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
People regularly contributing to Mac OS x port with regular and quality patches are, after proposal, invited to become a [[DomainDeveloper]].&lt;br /&gt;
&lt;br /&gt;
The purpose of this document is to clearly define all the steps to become a [[DomainDeveloper]]. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Preliminary :  step 1 in  [[Commit_Rights]] must be completed and checked, and you must be in the list of [[http://www.openoffice.org/FAQs/faq-licensing.html#jca1 JCA Licensed people]]&lt;br /&gt;
&lt;br /&gt;
=== Steps for ssh2 key to be uploaded ===&lt;br /&gt;
&lt;br /&gt;
==== Create the key ====&lt;br /&gt;
&lt;br /&gt;
Everything is described here : [[http://www.openoffice.org/scdocs/ddSSHGuide.html SSH Guide]] &lt;br /&gt;
&lt;br /&gt;
==== Upload the key ====&lt;br /&gt;
&lt;br /&gt;
You must create an issue, like described below  :&lt;br /&gt;
&lt;br /&gt;
Component : www&lt;br /&gt;
&lt;br /&gt;
Sub Component : openoffice.org cvs&lt;br /&gt;
&lt;br /&gt;
Title : CVS Commit access request&lt;br /&gt;
&lt;br /&gt;
Add louis ( Louis Suarez Potts) or st ( Stefan Taxhet ) on CC&lt;br /&gt;
&lt;br /&gt;
Upload your ssh2 public key respecting the process ( Attach a DSA key, not an RSA )&lt;br /&gt;
&lt;br /&gt;
A project lead will confirm your request &lt;br /&gt;
&lt;br /&gt;
Then the support will upload your key&lt;br /&gt;
&lt;br /&gt;
Once done the issue is set to Fixed , and the next step has to be verified before &amp;#039;&amp;#039;&amp;#039;you&amp;#039;&amp;#039;&amp;#039; close it.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;EXAMPLE&amp;#039;&amp;#039;&amp;#039; : [[http://www.openoffice.org/issues/show_bug.cgi?id=75291 Upload SSH2 Key for Etsushi Kato]]&lt;br /&gt;
&lt;br /&gt;
==== Verify it works ====&lt;br /&gt;
&lt;br /&gt;
You now can try to connect via tunnel, and follow instructions given [[http://www.openoffice.org/scdocs/ddSSHGuide.html SSH Guide]] &lt;br /&gt;
&lt;br /&gt;
If something goes wrong, ask for help to support, with a maximum of details, to solve the problem.&lt;br /&gt;
&lt;br /&gt;
Once it works, the issue can be closed, and you can e.g. test downloading a module from tunnel repository :&lt;br /&gt;
&lt;br /&gt;
First create a tunnel with the command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh -2 -x -L 2401:localhost:2401 tunnel@openoffice.org&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then in a new window:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export CVSROOT=&amp;quot;:pserver:your_login@localhost:/cvs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
cvs login ( enter )&lt;br /&gt;
&lt;br /&gt;
(your password )&lt;br /&gt;
&lt;br /&gt;
mkdir TEST&lt;br /&gt;
&lt;br /&gt;
cd TEST&lt;br /&gt;
&lt;br /&gt;
cvs -z4 co -r SRC680_m205 vcl &lt;br /&gt;
&lt;br /&gt;
cd vcl &lt;br /&gt;
&lt;br /&gt;
cat CVS/Root  -&amp;gt; should indicate : your local repository&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ask for CVS access for all modules required ===&lt;br /&gt;
&lt;br /&gt;
Two steps : create an issue is mandatory because the concerned project is tools, and because people can have only ssh2 key without being [[DomainDeveloper]].&lt;br /&gt;
&lt;br /&gt;
==== Create an issue ====&lt;br /&gt;
&lt;br /&gt;
You must create an issue, described below  :&lt;br /&gt;
&lt;br /&gt;
Component : tools&lt;br /&gt;
&lt;br /&gt;
Sub Component : www&lt;br /&gt;
&lt;br /&gt;
Title : CVS access to all modules required&lt;br /&gt;
&lt;br /&gt;
Assigned to mh  +  CC for ericb and/or pjanik&lt;br /&gt;
&lt;br /&gt;
Present yourself quickly, and ask the access&lt;br /&gt;
&lt;br /&gt;
A project lead will confirm&lt;br /&gt;
&lt;br /&gt;
An admin will confirm this is ok, and set the issue to Fixed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;EXAMPLE&amp;#039;&amp;#039;&amp;#039; : [[http://www.openoffice.org/issues/show_bug.cgi?id=75494 CVS Access all modules for Etsushi Kato]]&lt;br /&gt;
&lt;br /&gt;
==== Verify ====&lt;br /&gt;
&lt;br /&gt;
Create the tunnel :&lt;br /&gt;
&lt;br /&gt;
open a terminal and type :&lt;br /&gt;
&lt;br /&gt;
ssh -2 -x -L 2401:localhost:2401 tunnel@openoffice.org&lt;br /&gt;
&lt;br /&gt;
once logged in, open a new terminal, and do ( for example ):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd $OOO_SRC_ROOT/&lt;br /&gt;
&lt;br /&gt;
source MacOSXPPCEnv.Set.sh  { source MacOSXX86Env.Set.sh for Mac Intel }&lt;br /&gt;
&lt;br /&gt;
cd vcl  ( for example )&lt;br /&gt;
&lt;br /&gt;
IMPORTANT : be sure vcl has been checked from tunnel, not from anoncvs ( cat CVS/Root will give you the answer )&lt;br /&gt;
&lt;br /&gt;
export CWS_WORK_STAMP=aquavcl01   # Only needed for working with [[EIS]], can change for a different CWS ;) &lt;br /&gt;
&lt;br /&gt;
cd aqua/source/gdi&lt;br /&gt;
&lt;br /&gt;
add your changes to your_file.cxx, then commit :&lt;br /&gt;
&lt;br /&gt;
cvs commit -m &amp;quot;#i75689# bla bla ... the reason of the modification(s)&amp;quot;  your_file.cxx  # The #i75689# is an issue number in the tracker&lt;br /&gt;
&lt;br /&gt;
cvs update&lt;br /&gt;
&lt;br /&gt;
If nothing is wrong, cvs update should not return M for your_file.cxx, means the commit is successfull.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
In case of problem, use the issue until it is fixed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;#039;&amp;#039;&amp;#039;Welcome aboard :)&amp;#039;&amp;#039;&amp;#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Mac OS X porter Team at WWDC 2007&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
=== What is WWDC 2007 ? ===&lt;br /&gt;
&lt;br /&gt;
See [http://developer.apple.com/wwdc/ Apple WWDC 2007]&lt;br /&gt;
&lt;br /&gt;
====Labs Agenda====&lt;br /&gt;
&lt;br /&gt;
It is extremely important to organize us for Labs.&lt;br /&gt;
&lt;br /&gt;
The rule is extremely simple : bring your laptop, your code, and ask :)&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;10&amp;quot;&lt;br /&gt;
| Days&lt;br /&gt;
|monday&amp;lt;br&amp;gt;June 11&lt;br /&gt;
|tuesday&amp;lt;br&amp;gt;June 12&lt;br /&gt;
|wednesday&amp;lt;br&amp;gt;June 13&lt;br /&gt;
|thursday&amp;lt;br&amp;gt;June 14&lt;br /&gt;
|friday &amp;lt;br&amp;gt;June 15&lt;br /&gt;
|-&lt;br /&gt;
|Labs&lt;br /&gt;
|&amp;lt;br&amp;gt;Afternoon&lt;br /&gt;
|Morning&amp;lt;br&amp;gt;Afternoon&lt;br /&gt;
|Morning&amp;lt;br&amp;gt;Afternoon&lt;br /&gt;
|Morning&amp;lt;br&amp;gt;Afternoon&lt;br /&gt;
|Morning&amp;lt;br&amp;gt;Afternoon&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
====&amp;#039;&amp;#039;&amp;#039;Interesting Labs&amp;#039;&amp;#039;&amp;#039;====&lt;br /&gt;
&lt;br /&gt;
The complete list : [http://developer.apple.com/wwdc/tracks/macosx.html Mac OS X Essentials]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Core Text Lab &lt;br /&gt;
Receive one-on-one technical assistance and troubleshooting advice from the Core Text engineering team. Learn how to use the advanced font handling and blazingly fast Unicode layout capabilities of Core Text. Bring your laptop, your code, and your questions.&lt;br /&gt;
&lt;br /&gt;
*HIToolbox Lab&lt;br /&gt;
Work on tuning and debugging HIToolbox code in your Carbon application. Receive one-on-one technical assistance and troubleshooting advice from the High Level Toolbox engineering team, Apple DTS engineers, and technology evangelists. Bring your laptop, your code, and your questions.&lt;br /&gt;
&lt;br /&gt;
=== Our Objectives at the WWDC 2007 ===&lt;br /&gt;
&lt;br /&gt;
1) Contacts with Apple&amp;#039;s teams : &lt;br /&gt;
&lt;br /&gt;
* Present our current work, methods and team to Apple people, easy to meet only during WWDC ( Apple people can give us a face, and keep the contact )&lt;br /&gt;
&lt;br /&gt;
=&amp;gt; There is information difficult to find or ask by email, or IRC or whatever web : direct contact saves a lot of time, and is a very efficient way to progress with code&lt;br /&gt;
&lt;br /&gt;
* Get their impression about what we have already done and what is still ToDo&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2) Mac Team&amp;#039;s goals on Aqua OOo -&amp;gt; Apple&amp;#039;s Expertise : &lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Give MacOS X users the OOo suite they deserve&amp;quot; :&lt;br /&gt;
&lt;br /&gt;
 =&amp;gt; As mac platform and apple&amp;#039;s product fans, we are proud to bring the quality and power of OOo to mac users community&lt;br /&gt;
 =&amp;gt; Make OOo uses all the power of Mac OSX, including upcoming Leopard !&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;OOo to be as Apple HIG compliant as possible&amp;quot; :&lt;br /&gt;
&lt;br /&gt;
 =&amp;gt; Define what is expected for User Interface with people from Apple UI project&lt;br /&gt;
&lt;br /&gt;
 - FYI : Last year, Apple UI project proposed ericb to help us, once our native menus will be working. &lt;br /&gt;
&lt;br /&gt;
This is now done, and meet them cannot be a bad idea :)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3) Get code guidelines, tips, samples : &lt;br /&gt;
&lt;br /&gt;
 =&amp;gt; Ask for code review and find code snippets for :&lt;br /&gt;
&lt;br /&gt;
- HIView&lt;br /&gt;
- Printing&lt;br /&gt;
- Drag and Drop&lt;br /&gt;
+ more if possible&lt;br /&gt;
&lt;br /&gt;
=&amp;gt; More than 1000 Apple engineers are present, and can answer our questions regarding the code, during the whole week&lt;br /&gt;
&lt;br /&gt;
During WWDC2006 we found all the relevant informations for RunApplicationEventLoop() to be implemented . Without this code, we wouldn&amp;#039;t have something working at all, because this event loop is the key for everything in OpenOffice.org on Mac OS X ( without X11 ).&lt;br /&gt;
&lt;br /&gt;
4) Social Contract : Discuss and meet new developers and / or american people working for Mac OS X port (like Michael Sicotte, Vijay Venkatraman , other.. )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5) Visibility : make OpenOffice.org project visible in an ocean of other software. This is extremely important because it shows that OpenOffice.org project is alive for Mac OS X platform. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Who ? ===&lt;br /&gt;
&lt;br /&gt;
* Sébastien Plisson&lt;br /&gt;
* Eric Bachard&lt;br /&gt;
*  ???&lt;br /&gt;
&lt;br /&gt;
=== Todo list ===&lt;br /&gt;
&lt;br /&gt;
Please add topics, technical questions you would see asked by attendees to Apple engineers during WWDC&lt;br /&gt;
&lt;br /&gt;
====Suggestions for current issues to be fixed ====&lt;br /&gt;
&lt;br /&gt;
Timers :&lt;br /&gt;
&lt;br /&gt;
Current code is obsolete, and compatibility with Leopard won&amp;#039;t probably exist. &lt;br /&gt;
&lt;br /&gt;
Pavel wrote a patch using recent code. Seems to work fine, excepted a thread issue ( never crashed because of that yet , but this is probably correct) &lt;br /&gt;
&lt;br /&gt;
Salframe : &lt;br /&gt;
&lt;br /&gt;
Looot of things : &lt;br /&gt;
&lt;br /&gt;
*Find infos/code sample about parenting&lt;br /&gt;
&lt;br /&gt;
*Code review for HIFrameWork implementation &lt;br /&gt;
&lt;br /&gt;
*adapt native widget framework&lt;br /&gt;
&lt;br /&gt;
Events : code review, tips&lt;br /&gt;
&lt;br /&gt;
ATS : code review, ATS issues&lt;br /&gt;
&lt;br /&gt;
Mike Sicotte:  &lt;br /&gt;
I understood that implementing printing in aqua OOo was a topic that we didn&amp;#039;t get accepted into Google SOC - so remains on the ToDo list.  I notice that there are three Sessions specfically related to printing at WWDC:&lt;br /&gt;
    Leveraging the Common Unix Printing System (CUPS)&lt;br /&gt;
    Printing with Style in Mac OS X&lt;br /&gt;
    Printing Lab&lt;br /&gt;
If this is judged to be a good use of time at WWDC I would be willing to spend some time to help further develop the questions to be addressed with the Apple engineers.&lt;br /&gt;
&lt;br /&gt;
ericb-&amp;gt;Mike Sicotte&lt;br /&gt;
&lt;br /&gt;
Good idea. You are welcome :)&lt;br /&gt;
&lt;br /&gt;
==== Misc ====&lt;br /&gt;
&lt;br /&gt;
*describe the schedule of the travel&lt;br /&gt;
&lt;br /&gt;
ericb  : &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mulhouse -&amp;gt; Paris -&amp;gt; SF :  9th of June    SF scheduled arrival : 7:13 pm&lt;br /&gt;
SF -&amp;gt; Paris -&amp;gt; Mulhouse :  16th of June ( arrival 17th )  SF departure for the return :  3:00 pm&lt;br /&gt;
&lt;br /&gt;
Hotel : King Georges ( close to Union Square )&lt;br /&gt;
&lt;br /&gt;
Airport to Hotel transportation : not included&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sebastien : &lt;br /&gt;
&lt;br /&gt;
[to be completed]&lt;br /&gt;
&lt;br /&gt;
third attendee :&lt;br /&gt;
&lt;br /&gt;
[to be completed]&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
*Prepare 50 to 100 business cards  : &lt;br /&gt;
&lt;br /&gt;
the most simple is to use the model I can provide on demand , and print them with special paper ( pre-cut )&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Mac OS X porter Team at OOoCon 2007&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
=== Who ? ===&lt;br /&gt;
&lt;br /&gt;
* Shaun McDonald&lt;br /&gt;
* Eric Bachard&lt;br /&gt;
* (list to be completed)&lt;br /&gt;
&lt;br /&gt;
=== What ? ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The conference is over 3 days. Presentations should last around 45 minutes. http://www.openoffice.org/servlets/ReadMsg?list=announce&amp;amp;msgNo=320 Papers have to be submitted by 1st June to be considered.&lt;br /&gt;
&lt;br /&gt;
Ideas :&lt;br /&gt;
&lt;br /&gt;
Mike Sicotte:  Perhaps the results of the Google SOC could be a presentation.&lt;br /&gt;
&lt;br /&gt;
*create a complete topic for Mac port (one stream for a day or half day)&lt;br /&gt;
*How to improve ooo usability though the use of floating palettes instead of modal dialogs&lt;br /&gt;
&lt;br /&gt;
- several presentations / BOF &lt;br /&gt;
&lt;br /&gt;
Eric Bachard : Aqua OpenOffice.org ( conf / 1 hour )&lt;br /&gt;
&lt;br /&gt;
Others ?&lt;br /&gt;
&lt;br /&gt;
*reserve rooms together ? Better rent a house? &lt;br /&gt;
&lt;br /&gt;
* [FIXME]&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;2nd Mac porters meeting&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
This section has been moved to [[2nd Mac porters meeting]]&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;IRC Mac port meetings&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
This section has been moved to [[MacOSXPortMeetings]].&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Mac OS X (X11) Quality Assurance&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
This section has been moved to [[Mac OS X ( X11) Quality Assurance]]&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Mac OS X Implementing HIView and Carbon events&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
This section has been moved to [[Mac OS X Implementing HIView ]]&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Debug OpenOffice.org using XCode &amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
[[ MacOSX Debug OpenOffice.org using XCode]]&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Description of the Native Port problem&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
=== How does OpenOffice.org work on Mac OS X? ===&lt;br /&gt;
&lt;br /&gt;
Currently, on Mac OS X, OpenOffice.org uses X11, as &amp;quot;client&amp;quot;: X11 is a graphical server, coming from Unix world, and able to run under Linux, *BSD, Solaris, Mac OS X.&lt;br /&gt;
&lt;br /&gt;
 - X11 is run as an application, managed like other Apple applications.&lt;br /&gt;
 - All unix like applications are managed by X11, and from Aqua environment, only X11 is seen as only one applicatiion, &lt;br /&gt;
  even if other Unix/Linux (e.g.) applications are runing.&lt;br /&gt;
&lt;br /&gt;
OpenOffice.org asks X11 to display a window, waits for X11 acknowledgment, and OpenOffice.org displays the window. All transactions use the network, locally or not. the same mechanism is used for everything to be displayed.&lt;br /&gt;
&lt;br /&gt;
[[User:Ericb|Ericb]] 11:39, 3 June 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
=== Issues and known problems ===&lt;br /&gt;
&lt;br /&gt;
All events are managed by OpenOffice.org and X11, using the Xlib&lt;br /&gt;
&lt;br /&gt;
Only .ttf fonts type is currently available. Note: &amp;#039;&amp;#039;&amp;#039;system fonts are available &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
The rendering is made by X11, not by Mac OS X rendering engine.&lt;br /&gt;
&lt;br /&gt;
X11 and all its clients are seen as one application only: drag and drop protocol does not work because of that (solution: Pasteboard Manager)&lt;br /&gt;
&lt;br /&gt;
==== Other links ====&lt;br /&gt;
&lt;br /&gt;
http://wiki.services.openoffice.org/wiki/List_of_OpenOffice.org_Mac_OS_X_issues_and_problems#&lt;br /&gt;
&lt;br /&gt;
http://wiki.services.openoffice.org/wiki/Printing_problems_with_OpenOffice.org_2.0_for_Mac_OS_X#Reporting_printing_problems&lt;br /&gt;
&lt;br /&gt;
[[User:Ericb|Ericb]] 11:39, 3 June 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
== What do we have to do?==&lt;br /&gt;
&lt;br /&gt;
* (in progress) : Implement direct access to Apple graphical engine, using Apple API: Quartz2D/CoreGraphics (and replacing Xlib use)&lt;br /&gt;
&lt;br /&gt;
like: instantiate, manage events and threads for a graphical instance + all needed objects, drawing: manage all drawing cases&lt;br /&gt;
&lt;br /&gt;
* (in progress) : Implement native events management, using CarbonEventManager (replacing Xlib management)&lt;br /&gt;
&lt;br /&gt;
* (in progress) : Implement native font use, using Apple Type Server and ATSUI (for Unicode Imagery) (replacing X11 management)&lt;br /&gt;
&lt;br /&gt;
Work in progress: [[Mac OS X Porting - Native Fonts]]&lt;br /&gt;
&lt;br /&gt;
* Implement native sound, using QuickTime (replacing Java Media Framework): [[Mac OS X Porting - Native Audio and Video]]&lt;br /&gt;
&lt;br /&gt;
* Implement native Drag and drop, Implementing Pasteboard Manager: [[Mac OS X Porting - Native Drag and drop]]&lt;br /&gt;
&lt;br /&gt;
* (done experimental) Implement Native Filepicker&lt;br /&gt;
&lt;br /&gt;
* Implement Native Printing: current uses cups, but native printing is mandatory: [[Mac OS X Porting - Native_Printing]]&lt;br /&gt;
&lt;br /&gt;
* Implement Apple Spellchecker&lt;br /&gt;
&lt;br /&gt;
--[[User:Plipli|Plipli]] 09:27, 25 March 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Where is located the code to be modified?&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
Most of the changes are located in vcl (Visual Class Layer), for everything graphical, events, fonts, rendering and printing.&lt;br /&gt;
&lt;br /&gt;
Other, for sound and movies will be in avmedia (where the player is implemented in OpenOffice.org sources).&lt;br /&gt;
&lt;br /&gt;
For drag and drop, dtrans is concerned (Pasteboard Manager implementation)&lt;br /&gt;
&lt;br /&gt;
[FIXME]: Filepicker? Apple Spellchecker?&lt;br /&gt;
&lt;br /&gt;
[[User:Ericb|Ericb]] 11:39, 3 June 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;How will the new implementation be tested?==&lt;br /&gt;
&lt;br /&gt;
Currently, all openOffice.org code can be compiled without using the Xlib. but of course, a lot of features are missing,&lt;br /&gt;
&lt;br /&gt;
and the final package simply won&amp;#039;t work&lt;br /&gt;
&lt;br /&gt;
In vcl module&amp;quot;, a &amp;#039;&amp;#039;&amp;#039;toy&amp;#039;&amp;#039;&amp;#039; called svdem is built at buildtime. This binary is linked to libvcl* and so all new stuff can be tested.&lt;br /&gt;
&lt;br /&gt;
e.g. : draw anti-aliased lines works well. &lt;br /&gt;
&lt;br /&gt;
Everything implemented in aqua vcl code will be included in libvclplug_aqua, and svdem source code will contain a specific part to proceed tests.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;messagebox cleanup metadata&amp;quot; style=&amp;quot;border:1px solid blue;background-color:#B3FFF5;padding:7px;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;The magic is: when all needed features will work with svdem, it will work in the new version of OpenOffice.org !!&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[FIXME]: add more complete list of features to implement and test.&lt;br /&gt;
&lt;br /&gt;
== AquaVCL 01 cws ==&lt;br /&gt;
&lt;br /&gt;
[[http://qa.openoffice.org/issues/buglist.cgi?keywords=aqua Top 10 of Aqua issues]]&lt;br /&gt;
&lt;br /&gt;
[[Aquavcl01 tasks]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Changelog ===&lt;br /&gt;
&lt;br /&gt;
====Work in progresss : alpha 0.6 ====&lt;br /&gt;
&lt;br /&gt;
Started (19th March ) : &lt;br /&gt;
&lt;br /&gt;
Michael Sicotte proposed to investigate in timers, and continue [[http://www.openoffice.org/issues/show_bug.cgi?id=75228 Pavel&amp;#039;s work]] : objective is to replace obsolete code.  ( 23th March)&lt;br /&gt;
&lt;br /&gt;
[experimental] plipli proposed a patch for a new salframe implementation, using HIView + optionally compositing  (21th March )&lt;br /&gt;
&lt;br /&gt;
[commit scheduled] Michael Sicotte proposed a complete patch for invert() ( SAL_INVERT SAL_INVERT_50 and SAL_INVERT_TRACKFRAME )  (20th March )&lt;br /&gt;
&lt;br /&gt;
Tino proposed to work on code cleanup in salatsuifontutils.cxx, removing obsolete code &lt;br /&gt;
&lt;br /&gt;
ismael and michael work on invert() + drawAlphaRect() &lt;br /&gt;
&lt;br /&gt;
Damien started to work on drawEPS() &lt;br /&gt;
&lt;br /&gt;
plipli and ericb work on refresh&lt;br /&gt;
&lt;br /&gt;
==== alpha 0.5====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Top 10 Summary :  7 issues over 10 are fixed or very close to be : &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;time to code review, tracing, and search for memory leaks&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[done] Unicode input in salframe ( ekato ) ( 19th March )&lt;br /&gt;
&lt;br /&gt;
[experimental, works partially] beginning of HIView + HIComboxes works (text still missing)  (ericb + plipli)  ( 14th March ) &lt;br /&gt;
&lt;br /&gt;
[done] replace NewRgn() in salframe (ericb (11th March )&lt;br /&gt;
&lt;br /&gt;
[experimental, but very interesting] Improved native windows ( ismael ) ( 7th March )&lt;br /&gt;
&lt;br /&gt;
====alpha 0.4==== &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[Informative]&amp;#039;&amp;#039;&amp;#039; build runs with Leopard 9A377a ( fheckl ) ( 7th March ) &lt;br /&gt;
&lt;br /&gt;
Refresh screen issues  (plipli) (4th to 10th March )&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[informative]&amp;#039;&amp;#039;&amp;#039;  plipli announced  progress with refresh screen issues  ( 28th February )&lt;br /&gt;
&lt;br /&gt;
[experimental, not yet commited] Proxy configuration from system ( pjanik)  ( 28th February )&lt;br /&gt;
&lt;br /&gt;
[done] highlighted native button ( pjanik)  ( 27th February ) &lt;br /&gt;
&lt;br /&gt;
Native File Picker works ( fheckl  / pjanik )  ( 23th February  )&lt;br /&gt;
&lt;br /&gt;
====alpha 0.3====&lt;br /&gt;
&lt;br /&gt;
Cursor does appear -&amp;gt; invert() + setting a setBlinkTime value in UpdateSettings()  (pjanik /ericb ) &lt;br /&gt;
&lt;br /&gt;
[done] mirroring negative images (ismael) + DrawAlphaBitmap() + CreateWithMask()&lt;br /&gt;
&lt;br /&gt;
pjanik patch for Focus Events &lt;br /&gt;
&lt;br /&gt;
[done] scrolling works ( pjanik ) (17th February )&lt;br /&gt;
&lt;br /&gt;
[done ] carret works ( plipli) (17th February )&lt;br /&gt;
&lt;br /&gt;
[done] checkbuttons fix for checkmarks  (ericb) ( 17th February )&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[Informative]&amp;#039;&amp;#039;&amp;#039; Pavel Janik propose to solve offScreen buffer using HIView ( 17th February ) &lt;br /&gt;
&lt;br /&gt;
[experimental, never commited] patch for macosxrc.txt use + UpdateSettings() use in salframe.cxx ( ericb ( 16th February )&lt;br /&gt;
&lt;br /&gt;
Michael Sicotte joined the Team ( 15th February )&lt;br /&gt;
&lt;br /&gt;
invert() : first try  (ericb)   ( 13th february )&lt;br /&gt;
&lt;br /&gt;
====alpha 0.2====&lt;br /&gt;
&lt;br /&gt;
[12th February 2007 ]&lt;br /&gt;
&lt;br /&gt;
[done] calc does not start : bug identified by tino , first workaround (ericb)   [[http://www.openoffice.org/issues/show_bug.cgi?id=73691 issue 73691]]&lt;br /&gt;
&lt;br /&gt;
[done] bitmaps in native popup menus (ismael)  &lt;br /&gt;
&lt;br /&gt;
[done]  replace obsolete code for HandleWindowPaintEvent(), newRgn() .. etc  (ericb)  (12th February)&lt;br /&gt;
&lt;br /&gt;
correct salatslayout patch (plipli)  ( 11th February)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[Informative]&amp;#039;&amp;#039;&amp;#039;  Michel Renon proposed a summary about his work on fonts issues&lt;br /&gt;
&lt;br /&gt;
[patch] Pavel fixed several menu crashes (09th February )&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[Informative]&amp;#039;&amp;#039;&amp;#039; : Pavel posted a mail about several crashes origin &lt;br /&gt;
 &lt;br /&gt;
patch for radioboxes and checkboxes ( ericb ) (9th February)&lt;br /&gt;
&lt;br /&gt;
first complete patch for salatslayout.cxx ( plipli) ( 9th February )&lt;br /&gt;
&lt;br /&gt;
[done] most important crashes fixed ( pjanik)  ( 09th february )&lt;br /&gt;
&lt;br /&gt;
Modified baseline for 2.2. : Mac OS X10.4 -&amp;gt; Aqua will be 10.4 and 10.5 compatible only ( ericb)&lt;br /&gt;
&lt;br /&gt;
first try with multi line sallayout (plipli )  ( 08th February )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Damien Duportal joined the Team ( 7th February ) &lt;br /&gt;
&lt;br /&gt;
[done] scrollbar changes (ericb )   ( 4th February )&lt;br /&gt;
&lt;br /&gt;
====alpha 0.1====&lt;br /&gt;
&lt;br /&gt;
create Top 10 of issues before alpha  3rd February 2007 :  See : [[http://porting.openoffice.org/mac/news/2007/20070203toptenbeforealpha.html Top 10 of issues]]&lt;br /&gt;
&lt;br /&gt;
[experimental, not commited] patch for TPT() implementation (ericb)  ( 2nd February 2007 )&lt;br /&gt;
&lt;br /&gt;
Pavel Janik proposed to implement TransformProcessType() ( 2nd February 2007 )&lt;br /&gt;
&lt;br /&gt;
[not commited] implement UpdateSettings()   (ericb)  &lt;br /&gt;
&lt;br /&gt;
Pavel Janik resynchronized aquavel01 cws  with m202  ( 2nd February 2007 )&lt;br /&gt;
&lt;br /&gt;
====alpha 0.03====&lt;br /&gt;
&lt;br /&gt;
Michel Renon joined the Team (1st February )&lt;br /&gt;
&lt;br /&gt;
[done] fix checkbuttons and radiobuttons issues: offsets, redrawing of the check marks ( ericb) &lt;br /&gt;
&lt;br /&gt;
[done] fix scrollbar buttons (implement correct methods to retrieve dimensions)&lt;br /&gt;
&lt;br /&gt;
[done] implement mapfiles for Mac OS X (Stephan Bergmann, Daniel Boelzle, Tino Rachui , Pavel Janik)&lt;br /&gt;
&lt;br /&gt;
====alpha 0.02====&lt;br /&gt;
&lt;br /&gt;
[done] modify libsalsystools.dylib to be correctly loaded with the bundle  (ericb, + pjanik)&lt;br /&gt;
&lt;br /&gt;
[done] add mouse drag events  ( pjanik )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====alpha 0.01====&lt;br /&gt;
&lt;br /&gt;
[done] add new feature for Aqua windows, to allow QuickTime player use( mox )&lt;br /&gt;
&lt;br /&gt;
[done] replace obsolete code in salframe.cxx with (ericb)&lt;br /&gt;
&lt;br /&gt;
[done] fix correct size for main window (GetOptimaWindowSize()  ) (ericb)&lt;br /&gt;
&lt;br /&gt;
[done] fix alpha channel in pixmaps (ismael)&lt;br /&gt;
&lt;br /&gt;
====alpha 0.0====&lt;br /&gt;
&lt;br /&gt;
[done] pushbutton where not correctly drawn (ericb)&lt;br /&gt;
&lt;br /&gt;
[done] fix missing mouse events  (pjanik)&lt;br /&gt;
&lt;br /&gt;
[done] fix nRepeat in text entry  (ssa)&lt;br /&gt;
&lt;br /&gt;
2nd Mac porters Meeting&lt;br /&gt;
&lt;br /&gt;
===Work in progress ===&lt;br /&gt;
&lt;br /&gt;
URGENT :&lt;br /&gt;
&lt;br /&gt;
Top of issues causing crashes : event issue when tips is enabled causes crashes ( well known window / handler  / window desctructor / event loop bug )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Salatsuifontutils :  replace old code, track leaks : tino&lt;br /&gt;
&lt;br /&gt;
[done] Bitmaps : ( isma87) &lt;br /&gt;
&lt;br /&gt;
[running]  Crashes : (tino, pjanik, ericb, isma87, plipli )&lt;br /&gt;
&lt;br /&gt;
[???] Drag and drop :   (vijay)&lt;br /&gt;
&lt;br /&gt;
[???] Printing   (ybart)  &lt;br /&gt;
&lt;br /&gt;
Florian Heckl proposed a subject for Google Summer of Code about native printing&lt;br /&gt;
&lt;br /&gt;
Drawing/ windowing ( plipli / ericb ) -&amp;gt; mainly refresh &lt;br /&gt;
&lt;br /&gt;
[done] Implement cursor &lt;br /&gt;
&lt;br /&gt;
[started] Native Controls   (ericb) &lt;br /&gt;
&lt;br /&gt;
[work in progress] partial multiline sallayout  (plipli )&lt;br /&gt;
&lt;br /&gt;
To do : &lt;br /&gt;
&lt;br /&gt;
(started, Oliver) - modify the tree to make the bundle start without hack ( issue fixed during buildtime) &lt;br /&gt;
&lt;br /&gt;
(started, Florian Heckl)  verify Native FilePicker implementation ( works , tested in Hamburg  )&lt;br /&gt;
&lt;br /&gt;
[done] Ismael Merzaq)  implement blit functions in salgdi  ( important fix:  probably apha version to be tested once done) &lt;br /&gt;
&lt;br /&gt;
[done] Sebastien Plisson- update the missing functions list ( fonts ... ask hdu &amp;amp; cl&lt;br /&gt;
&lt;br /&gt;
[started] ericb, Mox Soini, Sebastien Plisson, Tino Rachui, Pavel janik continue to replace obsolete code&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
fix crashes with menus  (started : tino )&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Sort of documentation about VCL around Native Mac OS X port&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Do we really need to understand how it works? ;-)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vcl content:&lt;br /&gt;
&lt;br /&gt;
ls -laR | wc -l&lt;br /&gt;
  1750&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; Uff 1750 files to analyse :-/&lt;br /&gt;
&lt;br /&gt;
Our purpose is to describe the vcl organisation. The content of vcl is so important, that at the begining, the content will looks a bit confused. e.g. class names ..etc have nothing to do, only description with words and sense, but this will need some time before we can understand everything.&lt;br /&gt;
&lt;br /&gt;
How analyse with more efficiency? After some months to anlalyse &amp;#039;&amp;#039;&amp;#039;&amp;quot;horizontaly&amp;quot;&amp;#039;&amp;#039;&amp;#039;, it appears that list all the content of a directory is not the solution. Of course, we learned a lot, but we now have to complete with &amp;#039;&amp;#039;&amp;#039;&amp;quot;orthogonal&amp;quot;&amp;#039;&amp;#039;&amp;#039; method (compared to the previous one). The first method wasn&amp;#039;t obviously not the good/best way to describe vcl.&lt;br /&gt;
 &lt;br /&gt;
[FIXME] a different approach (will ask confirmation to Philipp Lohman), could be a description of how it work in runtime. First define what an instance is, a frame, and what exactly is concerned by such &amp;quot;objects&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
With that, we can write a list of different objects all using the same scheme: empty boxes (means pure virtual methods and classes in generic libvvcl), really implemented in the specific part, and finally, the API &amp;quot;encapsulated&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The most difficult is to see where the API is used. But for all the parts, this is the same.&lt;br /&gt;
&lt;br /&gt;
Finally, &amp;#039;&amp;#039;&amp;#039;what is important is the design of vcl&amp;#039;&amp;#039;&amp;#039;. Which &amp;#039;&amp;#039;&amp;#039;patterns&amp;#039;&amp;#039;&amp;#039; are used? What are the dependencies, how works the stack for the events, how works the scheduler, the timers too is very important, even fundamental for Aqua implementation. Will have a look at gsl mailing list, and other resources. Probably everything is already (randomly) written somewhere.&lt;br /&gt;
&lt;br /&gt;
=== VCL organisation ===&lt;br /&gt;
&lt;br /&gt;
Thank&amp;#039;s to Philipp Lohmann for this short, but precise description:&lt;br /&gt;
&lt;br /&gt;
Basically vcl is divided in the system dependent and the system independent part. The interface between these two is mostly the Sal interface (every interface name Sal*: SalInstance, SalFrame, SalGraphics, SalPrinter, etc.).&lt;br /&gt;
&lt;br /&gt;
SalInstance is a factory that can create all the other abstracted interfaces of the system dependent part. It also provides the main loop SalInstance::Yield()&lt;br /&gt;
&lt;br /&gt;
SalFrame abstracts any kind of system window.&lt;br /&gt;
&lt;br /&gt;
SalVirtualDevice abstracts an offscreen window (e.g. a Pixmap on X11)&lt;br /&gt;
&lt;br /&gt;
SalPrinter and SalInfoPrinter abstract the system print queues where SalInfoPrinter is for querying and SalPrinter for actual printing.&lt;br /&gt;
&lt;br /&gt;
SalGraphics is an interface produced by either SalFrame, SalVirtualDevice or SalPrinter which is used for actual drawing operations (text, bitmaps, vector graphics)&lt;br /&gt;
&lt;br /&gt;
SalSound is for sound playing.&lt;br /&gt;
&lt;br /&gt;
SalBitmap provides memory for bitmap graphics as well as methods converting this memory to a system handle (e.g. a Pixmap on X11).&lt;br /&gt;
&lt;br /&gt;
SalOpenGL provides OpenGL functionality if available.&lt;br /&gt;
&lt;br /&gt;
SalTimer is an interface for periodically triggering the event queue (to timer implementation).&lt;br /&gt;
&lt;br /&gt;
SalI18NImeStatus handles how the status window of an Input Method Editor (IME) should display (this is mainly X11 specific).&lt;br /&gt;
&lt;br /&gt;
SalSystem has some system specific methods that did not belong anywhere else:-)&lt;br /&gt;
&lt;br /&gt;
Of all these there interfaces is at least one implementation per system (Windows, X11 or Mac). The Unix implementation also has a plugin concept to allow for integration of different native toolkits (currently gtk and Qt) which became necessary for the implementation of Native Widget Framework (NWF) to display controls like their normal desktop counterparts.&lt;br /&gt;
&lt;br /&gt;
Basically the independent part (what is beneath vcl/source directory) has generic methods for drawing, window handling and stuff which it brings into a suitable form and then delegates to the system specific implementation (located beneath vcl/win for Windows and vcl/unx for the X11 platforms).&lt;br /&gt;
&lt;br /&gt;
[[User:Ericb|Ericb]] 16:12, 1 July 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
===Sub-directories description ===&lt;br /&gt;
&lt;br /&gt;
==== &amp;#039;&amp;#039;&amp;#039;Organisation of vcl directories&amp;#039;&amp;#039;&amp;#039; ====&lt;br /&gt;
&lt;br /&gt;
[[Image:aquavcl_organisation_complete_02.jpg]]&lt;br /&gt;
&lt;br /&gt;
==== &amp;#039;&amp;#039;&amp;#039;Directories in vcl. Short description&amp;#039;&amp;#039;&amp;#039; ====&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; aqua &amp;#039;&amp;#039;&amp;#039;: The name Aqua means Apple look and feel, and is well known as [http://developer.apple.com/documentation/UserExperience/Conceptual/OSXHIGuidelines/XHIGIntro/chapter_1_section_1.html Aqua Human Interface Guidelines]. This look and feel means Mac OS X. The work was begun by (probably) P. luby, Dan Williams Herbert Duerr (most of fonts stuff) and Ed Peterlin. Currently in ruin, this directory does contain a lot of ideas to investigate. The most important part of needed changes for native version (3.0) will be done inside aqua dir inc: does contain all vcl relative includes [PART1]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; prj &amp;#039;&amp;#039;&amp;#039;: Does contain build.lst and d.lst build.lst give us dependencies: probably a lot for vcl, build 98th module over ~148. Everything graphical depends in vcl. &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; qa &amp;#039;&amp;#039;&amp;#039; does contain all quality assurancy stuff&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;source&amp;#039;&amp;#039;&amp;#039;: the most important:-) This directory contains common sources for all architectures and OS. Mainly: Windows, Unix: Linux , Mac OS X (X11), Solaris, including generic, kde and gtk plugins, and Aqua (Mac OS X without X11, work currently in progress). &lt;br /&gt;
&lt;br /&gt;
Depending on the OS and the architecture, binaries are built or not.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; test &amp;#039;&amp;#039;&amp;#039;: This directory does contain all the needed stuff for tests. As example, in qa/testdocuments, you&amp;#039;ll find three documents (one writer, one calc and one impress) for tests purpose. &lt;br /&gt;
Other available tests are about memcheck and persistent window state. &lt;br /&gt;
 &lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; unx &amp;#039;&amp;#039;&amp;#039;: this directory does contain all unixes stuff. We have to understand what is inside to implement aqua port. For example, a lot of classes/strutures and objects use Xlib calls we have to replace with Carbon/Cocoa call (at least at first time) for Mac OS X native port.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; win &amp;#039;&amp;#039;&amp;#039;: Doing Mac OS X native port, I first believed this directory was not interesting for us, but I was wrong: OpenOffice.org roots are inside this directory, and a lot of comments and resources are inside. Mainly interesting if Carbon is used.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;workben&amp;#039;&amp;#039;&amp;#039;: Does contain a toy called &amp;quot;svdem&amp;quot;. svdem is a binary, used for new implementations. For example, actual aqua development uses svdem intensively, to verify all important properties we need: &lt;br /&gt;
&lt;br /&gt;
- display a window first (al least ...:)) &lt;br /&gt;
&lt;br /&gt;
- close cleanly this window&lt;br /&gt;
&lt;br /&gt;
- display a point&lt;br /&gt;
&lt;br /&gt;
- trace a line&lt;br /&gt;
&lt;br /&gt;
- trace an area &lt;br /&gt;
&lt;br /&gt;
- superpose two areas doing some important graphical operations, (like xor),&lt;br /&gt;
&lt;br /&gt;
- display a character&lt;br /&gt;
&lt;br /&gt;
- display a menu. &lt;br /&gt;
&lt;br /&gt;
- intercept events correctly.&lt;br /&gt;
&lt;br /&gt;
[FIXME] add more tests&lt;br /&gt;
&lt;br /&gt;
[[User:Ericb|Ericb]] 13:21, 3 June 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Naming convention&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
* Class names start with upper case letters, to improve readability.&lt;br /&gt;
&lt;br /&gt;
* Implemented Class names are derived from the virtual classes but can of course take arbitrary names.&lt;br /&gt;
To increase readability, it&amp;#039;s recommended to closely follow the base class name.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Impl prefix: means Implementation details&amp;#039;&amp;#039;&amp;#039;. The concerned class or method or function is not used outside of this module, so no external code (or other libraries) can see it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[ Events types using Carbon API (Mac OS X): ]]&amp;#039;&amp;#039;&amp;#039; A lot of events have to be managed in runtime. Here is a short description&lt;br /&gt;
&lt;br /&gt;
- do not freeze because bad event loops&lt;br /&gt;
&lt;br /&gt;
- event types implementation: currently, they are defined in vcl/aqua/inc/aquavclevents.hxx&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Apart: exact sense of hedabu? -&amp;gt; [FIXME] as far as I understood it: it is like &amp;quot;copy&amp;quot; to deliver software into the solver, with extra magic. The header files for example are manipulated so paths need not be exact. &amp;quot;headabu&amp;quot; is supposed to disappear little by little.&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;What do we have to build in vcl?&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
Two libraries, corresponding ressources (localized) and a toy so called « svdem »&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Common part&amp;#039;&amp;#039;&amp;#039;: &lt;br /&gt;
&lt;br /&gt;
in grey on right. The result will be a non architecture dependant library, built in all cases: for instance, libvcl680mxi.dylib on Mac Intel.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Specific part  &amp;quot; a plugin &amp;quot; &amp;#039;&amp;#039;&amp;#039;: &lt;br /&gt;
&lt;br /&gt;
Light yellow: aqua part will only concern Mac OS X (non X11) the name will probably be libvcl_aqua680mxi.dylib &lt;br /&gt;
&lt;br /&gt;
As you can see, win means windows part, in blue&lt;br /&gt;
&lt;br /&gt;
For Unix build (Linux, Solaris or current Mac OS X X11), in purple.&lt;br /&gt;
&lt;br /&gt;
Result will be:&lt;br /&gt;
&lt;br /&gt;
libvclplug_PLUGIN680mxi.DLLSUFFIX , where PLUGIN can be iether gen (generic) or gtk (using gtk+) or kde (using qt), and DLLSUFFIX can be either .so (linux) or .dylib (Mac OS X) ...etc (I&amp;#039;m not sure for other cases).&lt;br /&gt;
&lt;br /&gt;
Example: libvcl680mxi.dylib and libvclplug_aqua680mxi.dylib&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;In runtime&amp;#039;&amp;#039;&amp;#039;, libvclplug_aqua will be linked to libvcl680. the first one will contain the real implementation (respecting the API, e.g. Carbon) while the generic libvcl will only contain pure virtual methods ...etc like &amp;quot;empty boxes&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Current Aqua content ===&lt;br /&gt;
&lt;br /&gt;
A more complete description of aqua (Mac OS X / no X11 specific): [[Image:Vcl_aqua_organisation_02_tree.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==EXISTING objects to build in aqua==&lt;br /&gt;
&lt;br /&gt;
===Sal APP &amp;quot;everything application&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
[FIXME] add all objects descriptions&lt;br /&gt;
&lt;br /&gt;
==== saldata ====&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Defined in plugin exclusively&amp;#039;&amp;#039;&amp;#039; (i.e. for headers)&lt;br /&gt;
&lt;br /&gt;
Unix: unx/source/app/saldata.cxx (header in unx/inc)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Aqua: aqua/source/app/saldata.cxx (header in win/inc)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Windows: win/source/app/saldata.cxx (header in aqua/inc)&lt;br /&gt;
&lt;br /&gt;
* Role: saldata contains various kind of data used by the implementation for the concerned platform. &amp;#039;&amp;#039;&amp;#039;It is a bunch of global data collections reserved for the platform&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
It is just completely platform dependent, and nobody except this plugin can see it.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Saldata is something like a &amp;quot;second sal&amp;quot;, but providing an abstraction regarding windowing and graphics&amp;#039;&amp;#039;&amp;#039;, while SAL module provides an abstraction more Operating System oriented) &lt;br /&gt;
&lt;br /&gt;
e.g. : have a look at XRequest array in vcl/unx/source/app/saldata.cxx =&amp;gt; all calls are for Xlib (X11).  Ok, useless there, but interesting:-)&lt;br /&gt;
&lt;br /&gt;
[FIXME]: use Windows implementation could be a good starting point. Nothing is the same, but the current aquavcl cws uses similar objects, and it works very correctly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
saldatax.cxx uses classes SalInstance, SalObject, SalFrame, SalVirtualDevice, SalPrinter and fontList.&lt;br /&gt;
&lt;br /&gt;
Current list of possible objects who can be instantiated/released:&lt;br /&gt;
&lt;br /&gt;
structure SalData: does contain pointers on all kind of objects from other classes used in saldata.&lt;br /&gt;
&lt;br /&gt;
inline functions: [FIXME]: complete the description&lt;br /&gt;
&lt;br /&gt;
- SetSalData:&lt;br /&gt;
- GetSalData:&lt;br /&gt;
- GetAppSalData:&lt;br /&gt;
&lt;br /&gt;
==== salinst ====&lt;br /&gt;
&lt;br /&gt;
=&amp;gt; implemented in vcl/aqua/source/app/salinst.cxx&lt;br /&gt;
&lt;br /&gt;
Role: &lt;br /&gt;
&lt;br /&gt;
* get environment, mutexes, instantiate AquaSalInstance (Ctor, Dtor),&lt;br /&gt;
&lt;br /&gt;
* instantiates/releases a lot of other objects using Get() / CreateObject() / DestroyObject() methods.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Current list of possible objects who can be instantiated/released:&lt;br /&gt;
&lt;br /&gt;
 * VirtualDevice [FIXME]: exact role?&lt;br /&gt;
&lt;br /&gt;
 *Printer  &lt;br /&gt;
&lt;br /&gt;
- GetDefaultPrinter/ CreatePrinter() / DestroyPrinter - what a name ;-) -&lt;br /&gt;
&lt;br /&gt;
- InfoPrinter (Get/Create/Delete)&lt;br /&gt;
&lt;br /&gt;
- PrinterQueue (DeletePrinterQueueInfo / GetPrinterQueueInfo / GetPrinterQueueState)&lt;br /&gt;
&lt;br /&gt;
 * System (Create / Delete) [FIXME]: what means system here?&lt;br /&gt;
&lt;br /&gt;
 * Events: &lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::SetEventCallback()&lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::SetErrorEvenCallback()&lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::GetConnectionIdentifier()&lt;br /&gt;
&lt;br /&gt;
 * Menu / MenuItem: &lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::CreateMenu() / same for DestroyMenu()&lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::CreateMenuItem / same DestroyMenuItem()&lt;br /&gt;
&lt;br /&gt;
 * Sound: &lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::CreateSalSound()  =&amp;gt; object to a pointer of SalSound type&lt;br /&gt;
&lt;br /&gt;
Note: AquaSalInstance::DestroySalSound is not implemented (?)&lt;br /&gt;
&lt;br /&gt;
 * Timer: CreateTimer() /&lt;br /&gt;
&lt;br /&gt;
AquaSalInstance:: DestroyTimer() is not yet implemented (?)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Class MacImeStatus: inherits of SalI18NImeStatus&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; only there to see if there is a window to toggle into menubar [FIXME]??&lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::CreateI18NImeStatus(): instantiates MacImeStatus&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;For futher informations, see: &amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;[[Content of salinst.cxx]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
([[User:Ericb|Ericb]] 16:11, 20 May 2006 (CEST) )&lt;br /&gt;
&lt;br /&gt;
==== salmain ====&lt;br /&gt;
&lt;br /&gt;
Role: if possible, runs the standard vcl application code SVMain()&lt;br /&gt;
&lt;br /&gt;
([[User:Ericb|Ericb]] 16:15, 20 May 2006 (CEST))&lt;br /&gt;
&lt;br /&gt;
==== salsound ====&lt;br /&gt;
&lt;br /&gt;
==== salsys ====&lt;br /&gt;
&lt;br /&gt;
==== saltimer ====&lt;br /&gt;
&lt;br /&gt;
==== saltimer ====&lt;br /&gt;
&lt;br /&gt;
The main problem with SalTimer is the code we use is obsolete. To remove this deprecated code, sevarl work have been tried &lt;br /&gt;
&lt;br /&gt;
1) Pavel Janik, in issue 75228 &lt;br /&gt;
&lt;br /&gt;
works, but a serious problem is remaining (a thread issue, nothing anybody explained yet) &lt;br /&gt;
&lt;br /&gt;
2) eric bacahrd ( code will be attached soon )&lt;br /&gt;
&lt;br /&gt;
3) Michael Sicotte, who proposed to work on that, and continue Pavel implementation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SalTimer description&lt;br /&gt;
&lt;br /&gt;
AquaSalTimerproc&lt;br /&gt;
&lt;br /&gt;
AquaSalTimer::Start()&lt;br /&gt;
&lt;br /&gt;
AquaSalTimer::Stop()&lt;br /&gt;
&lt;br /&gt;
AquaSalTimer::Restart()&lt;br /&gt;
&lt;br /&gt;
AquaSalTimer::Installtask()   // yet needed ?&lt;br /&gt;
&lt;br /&gt;
=== Sal GDI (everything Graphical Display Interface) ===&lt;br /&gt;
&lt;br /&gt;
====salgdinativewidgets====&lt;br /&gt;
&lt;br /&gt;
[[native controls]]&lt;br /&gt;
&lt;br /&gt;
==== salatslayout ====&lt;br /&gt;
&lt;br /&gt;
==&amp;gt; implemented in vcl/aqua/source/gdi/salatslayout.cxx&lt;br /&gt;
&lt;br /&gt;
- Handle text layouting :&lt;br /&gt;
&lt;br /&gt;
    * Use ATSUI (ATSUCreateTextLayoutFromPtr) to layout the text unicode char buffer&lt;br /&gt;
    * Use ATSUI (ATSU..) to get informations about glyphs&lt;br /&gt;
    * Populate different arrays (mpGlyph2Chars, mpChars2Glyph, mpCharsWidths, mpGlyphAdvances)&lt;br /&gt;
      that are used in various methods.&lt;br /&gt;
&lt;br /&gt;
==== salatsuiutils ====&lt;br /&gt;
&lt;br /&gt;
==== salfontutils ====&lt;br /&gt;
&lt;br /&gt;
==== salmathutils ====&lt;br /&gt;
&lt;br /&gt;
==== sal bmp ====&lt;br /&gt;
&lt;br /&gt;
==== salvd ====&lt;br /&gt;
&lt;br /&gt;
==== salpixmaputils====&lt;br /&gt;
&lt;br /&gt;
==== salprn ====&lt;br /&gt;
&lt;br /&gt;
====salrectangle====&lt;br /&gt;
&lt;br /&gt;
==== salvd ====&lt;br /&gt;
&lt;br /&gt;
=== Sal Window===&lt;br /&gt;
&lt;br /&gt;
==== salframe ====&lt;br /&gt;
Documentation in progress, from damiend :&lt;br /&gt;
[[User:Damiend|Damiend page]]&lt;br /&gt;
&lt;br /&gt;
====salobj====&lt;br /&gt;
&lt;br /&gt;
== TO BE IMPLEMENTED (missing in Aqua)==&lt;br /&gt;
&lt;br /&gt;
===Audio===&lt;br /&gt;
&lt;br /&gt;
====audioconvert====&lt;br /&gt;
 (obsolete?) &lt;br /&gt;
&lt;br /&gt;
====devaudio====&lt;br /&gt;
(obsolete?)&lt;br /&gt;
&lt;br /&gt;
====native sound====&lt;br /&gt;
&lt;br /&gt;
====salimpsound====&lt;br /&gt;
&lt;br /&gt;
====vsound====&lt;br /&gt;
&lt;br /&gt;
===i18n===&lt;br /&gt;
&lt;br /&gt;
===keysymnames===&lt;br /&gt;
&lt;br /&gt;
===saldisp===&lt;br /&gt;
&lt;br /&gt;
===sm===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[FIXME]: is session manager usefull?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Native Controls&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
====Scrollbar====&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Works as expected&amp;#039;&amp;#039;&amp;#039;. The most important work is done&lt;br /&gt;
&lt;br /&gt;
See : [[Mac_OS_X_Porting_-_Native_Controls#ScrollBar]]&lt;br /&gt;
&lt;br /&gt;
====DrawThemeButton() documentation====&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Started&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
See : [[Mac_OS_X_Porting_-_Native_Controls#ComboBox]]&lt;br /&gt;
&lt;br /&gt;
Started&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DrawThemeButton&lt;br /&gt;
Draws a button.&lt;br /&gt;
&lt;br /&gt;
OSStatus DrawThemeButton (&lt;br /&gt;
   const Rect * inBounds,&lt;br /&gt;
   ThemeButtonKind inKind,&lt;br /&gt;
   const ThemeButtonDrawInfo * inNewInfo,&lt;br /&gt;
   const ThemeButtonDrawInfo * inPrevInfo,&lt;br /&gt;
   ThemeEraseUPP inEraseProc,&lt;br /&gt;
   ThemeButtonDrawUPP inLabelProc,&lt;br /&gt;
   UInt32 inUserData&lt;br /&gt;
);&lt;br /&gt;
Parameters&lt;br /&gt;
inBounds&lt;br /&gt;
A pointer to a structure of type Rect. Pass a rectangle specifying the boundary of the button, in local coordinates.&lt;br /&gt;
&lt;br /&gt;
inKind&lt;br /&gt;
A value of type ThemeButtonKind. Pass a constant specifying the type of button to draw. &lt;br /&gt;
See “Theme Buttons” for descriptions of possible values.&lt;br /&gt;
&lt;br /&gt;
inNewInfo&lt;br /&gt;
A pointer to a structure of type ThemeButtonDrawInfo. Before calling DrawThemeButton, &lt;br /&gt;
set the structure to contain the new state, value, and adornment for the button. &lt;br /&gt;
DrawThemeButton uses the information passed in the inNewInfo and inPrevInfo parameters&lt;br /&gt;
to apply transitional animation or sound effects as the button state changes, if such are &lt;br /&gt;
specified under the current theme.&lt;br /&gt;
&lt;br /&gt;
inPrevInfo&lt;br /&gt;
A pointer to a structure of type ThemeButtonDrawInfo. If the button state is changing,&lt;br /&gt;
set the structure to contain the previous state, value, and adornment for the button, &lt;br /&gt;
to allow DrawThemeButton to apply any transitional effects. If the button state is not &lt;br /&gt;
changing, you can pass NULL.&lt;br /&gt;
&lt;br /&gt;
inEraseProc&lt;br /&gt;
A value of type ThemeEraseUPP. If you have a custom background, use this parameter to pass&lt;br /&gt;
a universal function pointer to an application-defined function such as that described in &lt;br /&gt;
ThemeEraseProcPtr. DrawThemeButton calls this function to erase the background before drawing&lt;br /&gt;
 the button. If you pass NULL, DrawThemeButton&amp;#039;s default behavior is to erase the background&lt;br /&gt;
 for you.&lt;br /&gt;
&lt;br /&gt;
inLabelProc&lt;br /&gt;
A value of type ThemeButtonDrawUPP. If you pass a universal function pointer to an &lt;br /&gt;
application-defined function such as that described in ThemeButtonDrawProcPtr, DrawThemeButton&lt;br /&gt;
 calls that function to draw the label of the button. If you pass NULL, no label is drawn.&lt;br /&gt;
&lt;br /&gt;
inUserData&lt;br /&gt;
An unsigned 32-bit integer. Provide any data to be passed in to the callback functions specified in &lt;br /&gt;
the inLabelProc and inEraseProc parameters. Pass NULL if you do not wish to provide any data.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
A result code. See “Appearance Manager Result Codes”.&lt;br /&gt;
&lt;br /&gt;
Discussion&lt;br /&gt;
The DrawThemeButton function draws a theme-compliant button. If a ThemeEraseProcPtr is &lt;br /&gt;
specified in the inEraseProc parameter, DrawThemeButton uses that function to erase the &lt;br /&gt;
background of the button before drawing the button. After the button is drawn, if a&lt;br /&gt;
ThemeButtonDrawProcPtr is specified in the inLabelProc parameter, DrawThemeButton calls&lt;br /&gt;
that function to draw the button’s label.&lt;br /&gt;
&lt;br /&gt;
Note that DrawThemeButton also draws any appearance adornments for the button and that these&lt;br /&gt;
can extend beyond the button’s basic bounding rectangle, as specified in the inBounds parameter,&lt;br /&gt;
and may be of variable shape. You may therefore wish to call the function&lt;br /&gt;
GetThemeButtonBackgroundBounds to obtain the actual rectangle containing the pixels belonging&lt;br /&gt;
to a button under the current theme.&lt;br /&gt;
&lt;br /&gt;
Version Notes&lt;br /&gt;
This function is available with Appearance Manager 1.1 and later.&lt;br /&gt;
&lt;br /&gt;
Availability&lt;br /&gt;
Available in CarbonLib 1.0 and later when Appearance 1.1 or later is present.&lt;br /&gt;
Available in Mac OS X 10.0 and later.&lt;br /&gt;
Declared In&lt;br /&gt;
Appearance.h&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====HIComboBoxCreate() documentation====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HIComboBoxCreate&lt;br /&gt;
Creates a combo box control.&lt;br /&gt;
&lt;br /&gt;
OSStatus HIComboBoxCreate (&lt;br /&gt;
   const HIRect* boundsRect,&lt;br /&gt;
   CFStringRef text,&lt;br /&gt;
   const ControlFontStyleRec* style,&lt;br /&gt;
   CFArrayRef list,&lt;br /&gt;
   OptionBits inAttributes,&lt;br /&gt;
   HIViewRef* outComboBox&lt;br /&gt;
);&lt;br /&gt;
Parameters&lt;br /&gt;
boundsRect&lt;br /&gt;
The bounding box of the control.&lt;br /&gt;
&lt;br /&gt;
text&lt;br /&gt;
The default text in the editable portion of the control. Can be NULL.&lt;br /&gt;
&lt;br /&gt;
style&lt;br /&gt;
The font style of the both editable text and the text in the disclosure list. Can be NULL.&lt;br /&gt;
&lt;br /&gt;
list&lt;br /&gt;
The default values available in the disclosure list. Can be NULL.&lt;br /&gt;
&lt;br /&gt;
inAttributes&lt;br /&gt;
The default attributes of the combo box. For possible values, see “Combo Box Attributes”.&lt;br /&gt;
&lt;br /&gt;
outComboBox&lt;br /&gt;
On exit, a pointer to a reference for the new control.&lt;br /&gt;
&lt;br /&gt;
Discussion&lt;br /&gt;
The combo box can be used in compositing mode, as well as traditional Control Manager mode.&lt;br /&gt;
When created, this view is invisible. To see the view, you must show the view by calling HIViewSetVisible.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== What is used for Linux, Windows, Mac OS X ...build ? ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[Description of the dependencies]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[Windows]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[MacOS X]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[Linux]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[Solaris]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Content of Aqua ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[Click here to see the complete list]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Content of vcl/inc&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Notes: &lt;br /&gt;
&lt;br /&gt;
1) Where to find includes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;foo/bar.hxx&amp;gt; means you can find bar.hxx in the foo module. The new style file is foo/inc/foo/bar.hxx, old style is foo/inc/bar.hxx and sometimes the file is somewhere else in the tree or generated. The deliver process copies/generates the file into solver at solver/680/build_type/inc/foo. Good for fixing broken builds. ;-)&lt;br /&gt;
&lt;br /&gt;
2) &lt;br /&gt;
suffix .h (for C calls or first version?) or .hxx (C++) &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;A) Family of includes&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
Looking more closely at the list brings to the fore (expression from dictionary ;-) ) that include names are&lt;br /&gt;
informatives. Most of the time, the name gives the function/role.&lt;br /&gt;
What is interesting is the files with name begining with &amp;quot;sal&amp;quot;. sal means System Abstraction Layer + include&amp;#039;s function (or explicit name). &lt;br /&gt;
&lt;br /&gt;
Partial list, for example:&lt;br /&gt;
&lt;br /&gt;
salatype.hxx&lt;br /&gt;
&lt;br /&gt;
salbmp.hxx&lt;br /&gt;
&lt;br /&gt;
salctrlhandle.hxx&lt;br /&gt;
&lt;br /&gt;
salctype.hxx&lt;br /&gt;
&lt;br /&gt;
salframe.hxx&lt;br /&gt;
&lt;br /&gt;
salgdi.hxx&lt;br /&gt;
&lt;br /&gt;
salgeom.hxx&lt;br /&gt;
&lt;br /&gt;
sallayout.hxx (main header for fonts services)&lt;br /&gt;
...&lt;br /&gt;
salmenu&lt;br /&gt;
salnativewidgets&lt;br /&gt;
...etc&lt;br /&gt;
&lt;br /&gt;
Other important families are &amp;quot;sv&amp;quot; and &amp;quot;uno&amp;quot; or &amp;quot;win&amp;quot; (window) prefixed. sal family will be analysed apart.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;B) Includes of includes&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Some includes are more important than other. To prove this, just have a look is sufficient: some are always needed, and some more rarely.&lt;br /&gt;
&lt;br /&gt;
To verify, a simple test to do in vcl/inc:&lt;br /&gt;
&lt;br /&gt;
egrep -H &amp;quot;#include&amp;quot; ./* | wc -l  gives me 681 lines ! And some of them are the same...&lt;br /&gt;
&lt;br /&gt;
To know more, the precedent command line can be modified to make appear the numerous call &lt;br /&gt;
to the same includes files.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
egrep -H &amp;quot;#include&amp;quot; ./* | cut -d&amp;quot;#&amp;quot; -f2 | sort &amp;gt; liste.txt&lt;br /&gt;
&lt;br /&gt;
The content of liste.txt is explicit: dllapi.h, sv.h and some other are very important, while some other includes are only one or two times used. We can see too that vos includes are numerous, even if vos is deprecated**&lt;br /&gt;
&lt;br /&gt;
 **see http://wiki.services.openoffice.org/wiki/Source_code_directories&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I&amp;#039;m nearly sure that a complete analysis of just this result will give us a lot of information.&lt;br /&gt;
&lt;br /&gt;
I propose to change the order of analysis starting with dllapi.h and sv.h.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[to be continued]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;B1) &amp;quot;sal&amp;quot; includes family&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
[[salinst.hxx]] This seems to be the main include file&lt;br /&gt;
&lt;br /&gt;
[[salatype.hxx]]&lt;br /&gt;
&lt;br /&gt;
[[salctrlhandle.hxx]]&lt;br /&gt;
&lt;br /&gt;
[[salctype.hxx]]&lt;br /&gt;
&lt;br /&gt;
[[salframe.hxx]]&lt;br /&gt;
&lt;br /&gt;
[[salgdi.hxx]]&lt;br /&gt;
&lt;br /&gt;
[[salgeom.hxx]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[ sallayout.hxx ]]&amp;#039;&amp;#039;&amp;#039; &amp;lt;-- see Native Fonts implementation&lt;br /&gt;
&lt;br /&gt;
[[salgtype.hxx]]&lt;br /&gt;
&lt;br /&gt;
[[vcl/inc/salobj.hxx]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;B2) Classicals includes&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
file: abstdlg.hxx [ means abstract dialog ]&lt;br /&gt;
&lt;br /&gt;
This includes does contain the following classes definitions:&lt;br /&gt;
&lt;br /&gt;
[FIXME] : choose a precise presentation template for classes &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
VclAbstractDialog,&lt;br /&gt;
&lt;br /&gt;
VclAbstractTerminateDialog, &lt;br /&gt;
&lt;br /&gt;
VclAbstractRefreshableDialog,&lt;br /&gt;
 &lt;br /&gt;
VclAbstractDialogFactory, &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
uses &amp;lt;tools/solar.h&amp;gt; , &amp;lt;tools/string.hxx&amp;gt; + &lt;br /&gt;
&lt;br /&gt;
&amp;quot;dllapi.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Note : dllapi.h is very interesting because when we have to find (for example) a library suffix, SAL_DLLEXTENSSION can replace all suffixes (every OS&amp;#039;s and archs). Just including sal/config.h does it ! &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Classes:&lt;br /&gt;
&lt;br /&gt;
Window -&amp;gt; what? [FIXME]&lt;br /&gt;
ResId -&amp;gt; what?&lt;br /&gt;
&lt;br /&gt;
Does contain the prototype of VclAbstractDialog, inherit of VCL_DLLPUBLIC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
file: dllapi.h [ dll for dynamic linked library ]&lt;br /&gt;
Uses: &amp;lt;sal/config.h&amp;gt; and &amp;gt;sal/types/h&amp;gt;&lt;br /&gt;
includes: VCL_DLLPUBLIC macro&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
file: accel.h [ means accelerator ]&lt;br /&gt;
&lt;br /&gt;
Classes:&lt;br /&gt;
&lt;br /&gt;
Accelerator &lt;br /&gt;
{&lt;br /&gt;
}&lt;br /&gt;
ImplAccelEntry &lt;br /&gt;
{&lt;br /&gt;
public members: &lt;br /&gt;
&lt;br /&gt;
Names&lt;br /&gt;
&lt;br /&gt;
mnId&lt;br /&gt;
maKeyCode&lt;br /&gt;
mpAccel&lt;br /&gt;
mpAutoAccel&lt;br /&gt;
mbEnabled&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function / returns / parameters&lt;br /&gt;
&lt;br /&gt;
ImplGetKeyCode / void / KeyFuncType eFunc, ref rCode1 , ref rCode2, ref rCode3&lt;br /&gt;
&lt;br /&gt;
file: accel.hxx &lt;br /&gt;
&lt;br /&gt;
Uses: &amp;lt;sv.h&amp;gt; , &amp;quot;dllapi.h&amp;quot; ,&amp;lt;tools/resid.hxx&amp;gt;, &amp;lt;&amp;lt;tools/rc.hxx&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Classes:&lt;br /&gt;
&lt;br /&gt;
ImplAccelData;&lt;br /&gt;
ImplAccelEntry;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Important Links ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[Progressive implementation]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Native Font server Implementation&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;[[Mac OS X Porting - Native Fonts]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Native Sound Implementation&amp;#039;&amp;#039;&amp;#039;: [[Mac OS X Porting - Native Audio and Video]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Native Printing Implementation&amp;#039;&amp;#039;&amp;#039;: [[Mac OS X Porting - Native_Printing]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Drag and Drop implementation&amp;#039;&amp;#039;&amp;#039;: [[Mac OS X Porting - Native Drag and drop]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Data Acquisition&amp;#039;&amp;#039;&amp;#039; : [[Mac OS X Porting - Data Acquisition]]&lt;br /&gt;
&lt;br /&gt;
This work is part of http://wiki.services.openoffice.org/wiki/Mac_OS_X_Porting_-_Work_Areas/Todo%27s&lt;br /&gt;
&lt;br /&gt;
[to be continued:-) ]&lt;br /&gt;
&lt;br /&gt;
== Keyboard comparizon between OpenOffice.org / Mac OS X  application ==&lt;br /&gt;
&lt;br /&gt;
[FIXME] redo a cleanest array &lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;vertical-align:top; text-align:centered; background-color:#F0F0F0;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#99CCFF; font-weight:bold;&amp;quot; &lt;br /&gt;
| Modifier||+ key  || Result || TextEdit  returns&lt;br /&gt;
|-&lt;br /&gt;
|ALT|| a||æ ||æ &lt;br /&gt;
|-&lt;br /&gt;
|ALT||b||ß ||ß&lt;br /&gt;
|-&lt;br /&gt;
|ALT||c||© ||©&lt;br /&gt;
|-&lt;br /&gt;
|ALT||d||∂ ||∂&lt;br /&gt;
|-&lt;br /&gt;
|ALT||e||ê ||ê&lt;br /&gt;
|-&lt;br /&gt;
|ALT||f||ƒ ||ƒ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||g ||ﬁ ||ﬁ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||h ||Ì ||Ì&lt;br /&gt;
|-&lt;br /&gt;
|ALT||i ||î ||î&lt;br /&gt;
|-&lt;br /&gt;
|ALT||j ||Ï ||Ï&lt;br /&gt;
|-&lt;br /&gt;
|ALT||k ||È ||È&lt;br /&gt;
|-&lt;br /&gt;
|ALT||l ||¬ ||¬&lt;br /&gt;
|-&lt;br /&gt;
|ALT||m ||µ ||µ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||n ||~ ||~&lt;br /&gt;
|-&lt;br /&gt;
|ALT||o ||œ ||œ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||p ||π ||π&lt;br /&gt;
|-&lt;br /&gt;
|ALT||q ||‡ ||‡&lt;br /&gt;
|-&lt;br /&gt;
|ALT||r ||® ||®&lt;br /&gt;
|-&lt;br /&gt;
|ALT||s ||Ò ||Ò&lt;br /&gt;
|-&lt;br /&gt;
|ALT||t ||† ||†&lt;br /&gt;
|-&lt;br /&gt;
|ALT||u ||º ||º&lt;br /&gt;
|-&lt;br /&gt;
|ALT||v ||◊ ||◊&lt;br /&gt;
|-&lt;br /&gt;
|ALT||w ||‹ ||‹&lt;br /&gt;
|-&lt;br /&gt;
|ALT||x ||≈ ||≈&lt;br /&gt;
|-&lt;br /&gt;
|ALT||y ||Ú ||Ú&lt;br /&gt;
|-&lt;br /&gt;
|ALT||z ||Â ||Â&lt;br /&gt;
|-&lt;br /&gt;
|ALT||A ||Æ ||Æ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||B ||∫ ||∫&lt;br /&gt;
|-&lt;br /&gt;
|ALT||C ||¢ ||¢&lt;br /&gt;
|-&lt;br /&gt;
|ALT||D||∆||∆&lt;br /&gt;
|-&lt;br /&gt;
|ALT||F ||· ||·&lt;br /&gt;
|-&lt;br /&gt;
|ALT||G ||ﬂ ||ﬂ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||H ||Î ||Î&lt;br /&gt;
|-&lt;br /&gt;
|ALT||I ||Î ||Î&lt;br /&gt;
|-&lt;br /&gt;
|ALT||J ||Í ||Í&lt;br /&gt;
|-&lt;br /&gt;
|ALT||K ||Ë ||Ë&lt;br /&gt;
|-&lt;br /&gt;
|ALT||L || &amp;lt;pre&amp;gt;|&amp;lt;/pre&amp;gt; ||&amp;lt;pre&amp;gt;|&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|ALT||M ||Ó ||Ó&lt;br /&gt;
|-&lt;br /&gt;
|ALT||N ||ı ||ı&lt;br /&gt;
|-&lt;br /&gt;
|ALT||O ||Œ ||Œ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||P ||∏ ||∏&lt;br /&gt;
|-&lt;br /&gt;
|ALT||Q ||Ω ||Ω&lt;br /&gt;
|-&lt;br /&gt;
|ALT||R ||‚ ||‚&lt;br /&gt;
|-&lt;br /&gt;
|ALT||S ||∑ ||∑&lt;br /&gt;
|-&lt;br /&gt;
|ALT||T ||™ ||™&lt;br /&gt;
|-&lt;br /&gt;
|ALT||U ||ª ||ª&lt;br /&gt;
|-&lt;br /&gt;
|ALT||V ||√ ||√&lt;br /&gt;
|-&lt;br /&gt;
|ALT||W ||› ||›&lt;br /&gt;
|-&lt;br /&gt;
|ALT||X ||⁄ ||⁄&lt;br /&gt;
|-&lt;br /&gt;
|ALT||Y ||Ÿ ||Ÿ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||Z ||Å ||Å&lt;br /&gt;
|-&lt;br /&gt;
|ALT||$ ||€ ||€&lt;br /&gt;
|-&lt;br /&gt;
|ALT||` ||@ ||@&lt;br /&gt;
|-&lt;br /&gt;
|ALT||£ ||# ||#&lt;br /&gt;
|-&lt;br /&gt;
|ALT||* ||¥ ||¥&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Sous réserve d&amp;#039;erreur ou omission [[User:Ericb|Ericb]] 00:05, 14 January 2007 (CET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[User:Ericb|Ericb]] 15:00, 22 Jul 2005 (EDT)&lt;br /&gt;
&lt;br /&gt;
[[Category:Porting]]&lt;br /&gt;
[[Category:MacOSX]]&lt;br /&gt;
[[Category:Aqua]]&lt;/div&gt;</summary>
		<author><name>Plipli</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Mac_OS_X_Implementing_HIView&amp;diff=30760</id>
		<title>Mac OS X Implementing HIView</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Mac_OS_X_Implementing_HIView&amp;diff=30760"/>
		<updated>2007-04-25T13:00:00Z</updated>

		<summary type="html">&lt;p&gt;Plipli: /* HIFramework integration and benefits */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Contributors ==&lt;br /&gt;
&lt;br /&gt;
Eric Bachard[[http://wiki.services.openoffice.org/wiki/User:Ericb ericb]]&lt;br /&gt;
&lt;br /&gt;
Sébastien Plisson [[http://wiki.services.openoffice.org/wiki/User:Plipli plipli]]&lt;br /&gt;
&lt;br /&gt;
== Introduction == &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[DRAFT]  : means,  not yet working, work in progress ... &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
HIObject is a common base class for all user interface objects and all menus, windows, controls, toolbars, and so on, are subclasses of HIObject.&lt;br /&gt;
&lt;br /&gt;
HIView is an object-oriented view system subclassed from HIObject. All controls are implemented as HIView objects (&amp;quot;views&amp;quot;). You can easily subclass HIView classes, making it easy to implement custom controls. Over time the HIView API will replace the current Control Manager. See [[http://developer.apple.com/documentation/Carbon/Conceptual/HandlingWindowsControls/hitb-wind_cont_tasks/chapter_3_section_9.html HIView intro]]&lt;br /&gt;
&lt;br /&gt;
The main idea behind HIView is to superpose plans, to create any view, using compositing possibilities of Quartz Graphical Engine. &lt;br /&gt;
&lt;br /&gt;
The final result is the superposition of all plans, following simple rules like :&lt;br /&gt;
&lt;br /&gt;
 - The last plan is always drawn on the previous one ;&lt;br /&gt;
 - Some plans can  be declared visible, or not, very easely.&lt;br /&gt;
&lt;br /&gt;
This page is part of [[http://wiki.services.openoffice.org/wiki/Mac_OS_X_Porting_-_Native_Controls Native Controls Implementation]] and the objective is to use HIView for HIComboboxes or other HI*  controls. &lt;br /&gt;
&lt;br /&gt;
Our objective is to bind vcl controls with HI* controls, from Carbon API. &lt;br /&gt;
&lt;br /&gt;
e.g.  :  implement HICombobox as one control only.&lt;br /&gt;
&lt;br /&gt;
The generic implementation, under tests (and not fully working), uses : &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;In progress :&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;&lt;br /&gt;
- plipli : &amp;#039;&amp;#039;&amp;#039;HIFramework&amp;#039;&amp;#039;&amp;#039; integration : compiled, to be cleaned up before testing delivery to mac@porting ;&lt;br /&gt;
- ericb/ismael : salnativewidget - create and bind &amp;#039;&amp;#039;&amp;#039;native controls&amp;#039;&amp;#039;&amp;#039; (HIViews) (ericb) and &amp;#039;&amp;#039;&amp;#039;HIWindow&amp;#039;&amp;#039;&amp;#039; (ismael);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note : we &amp;quot;or&amp;quot;- ed kWindowCompositingAttribute in nWindowAttributes, to see compositing effects. &lt;br /&gt;
[FIXME] : investigate, because use this attribute causes refresh issues&lt;br /&gt;
&lt;br /&gt;
== HIFramework integration and benefits ==&lt;br /&gt;
--[[User:Plipli|Plipli]] 15:00, 25 April 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Origin&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; : Issued from Apple samples&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Pros&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; : &lt;br /&gt;
- use recent API code, &amp;lt;br&amp;gt;&lt;br /&gt;
- given with many helpers and set/getters to manage data and events&amp;lt;br&amp;gt;&lt;br /&gt;
- easily adaptable to use new services coming with Leopard (MacOSX 0.5)&amp;lt;br&amp;gt;&lt;br /&gt;
- up/down compatibility wit hdifferent MacOSX versions&amp;lt;br&amp;gt;&lt;br /&gt;
- hiobject registering system : low couplage with the utility classes of HIFramework&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Cons&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; :&lt;br /&gt;
- ?? too nice to be true :-)&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Step by step&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; :&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;1&amp;#039;&amp;#039;&amp;#039; - When any HIObject is created in salframe/salnativewidget (AquaSalFrame / AquaSalGraphics) it will be &lt;br /&gt;
registered to HIFramework base classes ;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;2a&amp;#039;&amp;#039;&amp;#039; - Being registered gives this instance of HIView/HIWindow access to helpers/setters/getters methods ;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;2b&amp;#039;&amp;#039;&amp;#039; - Event handling is highly centralized/factored : create, initialize, draw... ;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;3&amp;#039;&amp;#039;&amp;#039; - Allmost all possible data / events is covered by HIFramework and will be easily used, as new controls are implemented in salnativewidget ;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Conclusion&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; :&lt;br /&gt;
- Let&amp;#039;s clean it, test it and enjoy fastest implementation of Aqua native controls !! (GsoC fun ;-)&lt;br /&gt;
&lt;br /&gt;
== Technical principles ==&lt;br /&gt;
&lt;br /&gt;
1) OO ask to VCL / native implementation code to draw controls (ie DrawNativeControl) or images or text&lt;br /&gt;
&lt;br /&gt;
2) For controls, native implementation code create objects but do not draw them&lt;br /&gt;
For images and text, native code draw objects to context (from QDBegin) or context from HiView event&lt;br /&gt;
&lt;br /&gt;
3) When HIView events are received by event handler, especially kEventControlDraw, native code should draw controls to context given by the event&lt;br /&gt;
&lt;br /&gt;
4) Native code call needsDisplay functions to tell Quartz which zone to update&lt;br /&gt;
&lt;br /&gt;
== Current code implementation==&lt;br /&gt;
&lt;br /&gt;
===Events for HIView ===&lt;br /&gt;
&lt;br /&gt;
Two sorts of events are needed: &lt;br /&gt;
&lt;br /&gt;
*for objects (ClasskEventClassHIObject )  :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;kEventHIObjectConstruct&lt;br /&gt;
&lt;br /&gt;
kEventHIObjectInitialize&lt;br /&gt;
&lt;br /&gt;
kEventHIObjectDestruct&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*for controls themselves ( Class kEventClassControl ) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;kEventControlDraw &lt;br /&gt;
&lt;br /&gt;
kEventControlInitialize&lt;br /&gt;
&lt;br /&gt;
kEventControlHitTest&lt;br /&gt;
&lt;br /&gt;
kEventControlGetPartRegion&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Current implementation : see vcl/aqua/aquavclevents.hxx for more informations about the syntax.&lt;br /&gt;
&lt;br /&gt;
===Install Event Handler ===&lt;br /&gt;
&lt;br /&gt;
Now we have to install event Handler, inside AquaSalFrame::CreateNewSystemWindow() :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
InstallEventHandler (&lt;br /&gt;
                           GetControlEventTarget (mhView),&lt;br /&gt;
                           NewEventHandlerUPP (HandleHIViewEvent),&lt;br /&gt;
                           GetEventTypeCount (cHIViewEvent),&lt;br /&gt;
                           cHIViewEvent,&lt;br /&gt;
                           (void*)mhView, // note the use of the pointer &lt;br /&gt;
                           NULL&lt;br /&gt;
                           );&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== The HI* Event Handler ===&lt;br /&gt;
&lt;br /&gt;
The Handler is OSStatus type, and is used when events are detected.&lt;br /&gt;
&lt;br /&gt;
e.g.  : we created HandleHIViewEvent() &lt;br /&gt;
&lt;br /&gt;
using GetEventParameter, itself using the parameters described in Apple documentation. &lt;br /&gt;
&lt;br /&gt;
Code sample :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
OSStatus HandleHIViewEvent(EventHandlerCallRef inHandlerCallRef, EventRef inEvent, void* inUserData)&lt;br /&gt;
{ &lt;br /&gt;
    //lock&lt;br /&gt;
    ImplSalYieldMutexAcquire();&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    OSStatus status = noErr;&lt;br /&gt;
    &lt;br /&gt;
    // we use mrContext, global and seen from everywhere &lt;br /&gt;
    CGContextRef mrContext; &lt;br /&gt;
    &lt;br /&gt;
    // create HIRect, contianing the control bounds ( in local coordinates) &lt;br /&gt;
    HIRect bounds;  &lt;br /&gt;
&lt;br /&gt;
    status = GetEventParameter (inEvent, &lt;br /&gt;
                                kEventParamCGContextRef, &lt;br /&gt;
                                typeCGContextRef, &lt;br /&gt;
                                NULL, &lt;br /&gt;
                                sizeof (CGContextRef), &lt;br /&gt;
                                NULL, &lt;br /&gt;
                                &amp;amp;mrContext); &lt;br /&gt;
&lt;br /&gt;
    // not used, but usefull&lt;br /&gt;
    //require_noerr(status, CantGetGraphicsContext); // 2&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
    // We need to know the bounds containing the current control &lt;br /&gt;
    HIViewGetBounds ((HIViewRef) inUserData, &amp;amp;bounds); &lt;br /&gt;
&lt;br /&gt;
    // not used, but usefull&lt;br /&gt;
    //require_noerr(status, CantGetBoundingRectangle);&lt;br /&gt;
&lt;br /&gt;
    // unlock &lt;br /&gt;
    ImplSalYieldMutexRelease();&lt;br /&gt;
    &lt;br /&gt;
    return status;  &lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===HIView use in AquaSalFrame::CreateNewSystemWindow()  ===&lt;br /&gt;
&lt;br /&gt;
Code sample : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    //  TEST HIVIew part &lt;br /&gt;
    // Set mrContentView with HIView Content ViewRef&lt;br /&gt;
  &lt;br /&gt;
        HIRect myViewRect;&lt;br /&gt;
        myViewRect.origin.x = aContentRect.left; &lt;br /&gt;
        myViewRect.origin.y = aContentRect.right; &lt;br /&gt;
        myViewRect.size.width = aContentRect.right-aContentRect.left; &lt;br /&gt;
        myViewRect.size.height = aContentRect.bottom-aContentRect.top; &lt;br /&gt;
        OSStatus errval;&lt;br /&gt;
        errval = HIViewFindByID(HIViewGetRoot(mrWindow), kHIViewWindowContentID, &amp;amp;mrContentView); &lt;br /&gt;
&lt;br /&gt;
        // make the view visible                        &lt;br /&gt;
        HIViewSetVisible (mrContentView, true); &lt;br /&gt;
        &lt;br /&gt;
        // set the frame&lt;br /&gt;
        HIViewSetFrame (mrContentView, &amp;amp;myViewRect);&lt;br /&gt;
&lt;br /&gt;
        // Activate content view and children&lt;br /&gt;
        HIViewSetActivated (mrContentView,true);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Controls ===&lt;br /&gt;
&lt;br /&gt;
[FIXME]&lt;br /&gt;
&lt;br /&gt;
Example : HICombobox&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; code located in vcl/aqua/source/gdi/salnativewidgets.cxx  , where all NWF are defined &lt;br /&gt;
&lt;br /&gt;
1) declare CTRL_COMBOBOX control as &amp;quot;true&amp;quot; in isNativeControlSupported() &lt;br /&gt;
&lt;br /&gt;
2) get the control region in getNativeControlRegion() &lt;br /&gt;
&lt;br /&gt;
3) add CTRL_COMBOBOX case in drawNativeControl()&lt;br /&gt;
&lt;br /&gt;
Code sample for the last part (Warning : not yet working !! ) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 switch( nType )&lt;br /&gt;
    {&lt;br /&gt;
            &lt;br /&gt;
        case CTRL_COMBOBOX:&lt;br /&gt;
        if ( ( nPart==PART_BUTTON_DOWN) ||  (nPart==PART_SUB_EDIT) || (nPart==PART_ENTIRE_CONTROL) || (nPart==HAS_BACKGROUND_TEXTURE))&lt;br /&gt;
&lt;br /&gt;
        .... (other code ) &lt;br /&gt;
&lt;br /&gt;
                    HIViewRef myCombo;&lt;br /&gt;
                                        &lt;br /&gt;
                    HIRect rc2;&lt;br /&gt;
                    &lt;br /&gt;
                    rc2.origin.x = rControlRegion.GetBoundRect().Left();&lt;br /&gt;
                    rc2.origin.y = rControlRegion.GetBoundRect().Top();&lt;br /&gt;
                    rc2.size.width = rControlRegion.GetBoundRect().GetWidth();&lt;br /&gt;
                    rc2.size.height = rControlRegion.GetBoundRect().GetHeight();&lt;br /&gt;
                    &lt;br /&gt;
                    HIComboBoxCreate ( &amp;amp;rc2 , NULL, NULL, NULL, kHIComboBoxStandardAttributes, &amp;amp;myCombo);&lt;br /&gt;
                    &lt;br /&gt;
                    HIViewSetVisible ( myCombo, true);&lt;br /&gt;
                    HIViewAddSubview (mrView, myCombo); &lt;br /&gt;
                    &lt;br /&gt;
                    HIViewSetNeedsDisplay (myCombo, true);                   &lt;br /&gt;
                    &lt;br /&gt;
                    printf (&amp;quot;rc2.origin.x %.0f  \n rc2.origin.y %.0f \n rc2.size.width %.0f \n rc2.size.height %.0f \n&amp;quot;, &lt;br /&gt;
                    rc2.origin.x, rc2.origin.y, rc2.size.width , rc2.size.height );&lt;br /&gt;
                                        &lt;br /&gt;
                    //HIViewSetActivated (myCombo,true);&lt;br /&gt;
&lt;br /&gt;
                     .....  (other code )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usefull Links ==  &lt;br /&gt;
&lt;br /&gt;
=== References ===&lt;br /&gt;
&lt;br /&gt;
[[http://developer.apple.com/documentation/Carbon/Conceptual/HandlingWindowsControls/hitb-wind_cont_tasks/chapter_3_section_9.html Introducing HIView]]&lt;br /&gt;
&lt;br /&gt;
OverView : [[http://developer.apple.com/carbon/HIToolbox_feature.html HIToolbox]] &lt;br /&gt;
&lt;br /&gt;
HIVIew  : [[http://developer.apple.com/documentation/Carbon/Reference/HIViewReference/Reference/reference.html reference]] [[http://developer.apple.com/documentation/Carbon/Reference/HIViewReference/HIViewReference.pdf or .pdf format]]&lt;br /&gt;
&lt;br /&gt;
[[http://developer.apple.com/documentation/Carbon/Conceptual/Upgrading_HIToolbox/index.html Upgrading to HIToolbox]]&lt;br /&gt;
&lt;br /&gt;
===Code sample ===&lt;br /&gt;
&lt;br /&gt;
Build a big toy with all controls included : [http://developer.apple.com/samplecode/AppearanceSampleUpdated/listing575.html All controls + code around]&lt;br /&gt;
&lt;br /&gt;
High Level Toolbox, HIServices Release Notes : [http://developer.apple.com/releasenotes/Carbon/RN-HIToolbox/ HIToolbox]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Porting]]&lt;br /&gt;
[[Category:MacOSX]]&lt;br /&gt;
[[Category:Aqua]]&lt;/div&gt;</summary>
		<author><name>Plipli</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Mac_OS_X_Implementing_HIView&amp;diff=30758</id>
		<title>Mac OS X Implementing HIView</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Mac_OS_X_Implementing_HIView&amp;diff=30758"/>
		<updated>2007-04-25T12:58:57Z</updated>

		<summary type="html">&lt;p&gt;Plipli: /* HIFramework integration and benefits */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Contributors ==&lt;br /&gt;
&lt;br /&gt;
Eric Bachard[[http://wiki.services.openoffice.org/wiki/User:Ericb ericb]]&lt;br /&gt;
&lt;br /&gt;
Sébastien Plisson [[http://wiki.services.openoffice.org/wiki/User:Plipli plipli]]&lt;br /&gt;
&lt;br /&gt;
== Introduction == &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[DRAFT]  : means,  not yet working, work in progress ... &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
HIObject is a common base class for all user interface objects and all menus, windows, controls, toolbars, and so on, are subclasses of HIObject.&lt;br /&gt;
&lt;br /&gt;
HIView is an object-oriented view system subclassed from HIObject. All controls are implemented as HIView objects (&amp;quot;views&amp;quot;). You can easily subclass HIView classes, making it easy to implement custom controls. Over time the HIView API will replace the current Control Manager. See [[http://developer.apple.com/documentation/Carbon/Conceptual/HandlingWindowsControls/hitb-wind_cont_tasks/chapter_3_section_9.html HIView intro]]&lt;br /&gt;
&lt;br /&gt;
The main idea behind HIView is to superpose plans, to create any view, using compositing possibilities of Quartz Graphical Engine. &lt;br /&gt;
&lt;br /&gt;
The final result is the superposition of all plans, following simple rules like :&lt;br /&gt;
&lt;br /&gt;
 - The last plan is always drawn on the previous one ;&lt;br /&gt;
 - Some plans can  be declared visible, or not, very easely.&lt;br /&gt;
&lt;br /&gt;
This page is part of [[http://wiki.services.openoffice.org/wiki/Mac_OS_X_Porting_-_Native_Controls Native Controls Implementation]] and the objective is to use HIView for HIComboboxes or other HI*  controls. &lt;br /&gt;
&lt;br /&gt;
Our objective is to bind vcl controls with HI* controls, from Carbon API. &lt;br /&gt;
&lt;br /&gt;
e.g.  :  implement HICombobox as one control only.&lt;br /&gt;
&lt;br /&gt;
The generic implementation, under tests (and not fully working), uses : &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;In progress :&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;&lt;br /&gt;
- plipli : &amp;#039;&amp;#039;&amp;#039;HIFramework&amp;#039;&amp;#039;&amp;#039; integration : compiled, to be cleaned up before testing delivery to mac@porting ;&lt;br /&gt;
- ericb/ismael : salnativewidget - create and bind &amp;#039;&amp;#039;&amp;#039;native controls&amp;#039;&amp;#039;&amp;#039; (HIViews) (ericb) and &amp;#039;&amp;#039;&amp;#039;HIWindow&amp;#039;&amp;#039;&amp;#039; (ismael);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note : we &amp;quot;or&amp;quot;- ed kWindowCompositingAttribute in nWindowAttributes, to see compositing effects. &lt;br /&gt;
[FIXME] : investigate, because use this attribute causes refresh issues&lt;br /&gt;
&lt;br /&gt;
== HIFramework integration and benefits ==&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Origin&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; : Issued from Apple samples&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Pros&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; : &lt;br /&gt;
- use recent API code, &amp;lt;br&amp;gt;&lt;br /&gt;
- given with many helpers and set/getters to manage data and events&amp;lt;br&amp;gt;&lt;br /&gt;
- easily adaptable to use new services coming with Leopard (MacOSX 0.5)&amp;lt;br&amp;gt;&lt;br /&gt;
- up/down compatibility wit hdifferent MacOSX versions&amp;lt;br&amp;gt;&lt;br /&gt;
- hiobject registering system : low couplage with the utility classes of HIFramework&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Cons&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; :&lt;br /&gt;
- ?? too nice to be true :-)&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Step by step&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; :&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;1&amp;#039;&amp;#039;&amp;#039; - When any HIObject is created in salframe/salnativewidget (AquaSalFrame / AquaSalGraphics) it will be &lt;br /&gt;
registered to HIFramework base classes ;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;2a&amp;#039;&amp;#039;&amp;#039; - Being registered gives this instance of HIView/HIWindow access to helpers/setters/getters methods ;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;2b&amp;#039;&amp;#039;&amp;#039; - Event handling is highly centralized/factored : create, initialize, draw... ;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;3&amp;#039;&amp;#039;&amp;#039; - Allmost all possible data / events is covered by HIFramework and will be easily used, as new controls are implemented in salnativewidget ;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Conclusion&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; :&lt;br /&gt;
- Let&amp;#039;s clean it, test it and enjoy fastest implementation of Aqua native controls !! (GsoC fun ;-)&lt;br /&gt;
&lt;br /&gt;
== Technical principles ==&lt;br /&gt;
&lt;br /&gt;
1) OO ask to VCL / native implementation code to draw controls (ie DrawNativeControl) or images or text&lt;br /&gt;
&lt;br /&gt;
2) For controls, native implementation code create objects but do not draw them&lt;br /&gt;
For images and text, native code draw objects to context (from QDBegin) or context from HiView event&lt;br /&gt;
&lt;br /&gt;
3) When HIView events are received by event handler, especially kEventControlDraw, native code should draw controls to context given by the event&lt;br /&gt;
&lt;br /&gt;
4) Native code call needsDisplay functions to tell Quartz which zone to update&lt;br /&gt;
&lt;br /&gt;
== Current code implementation==&lt;br /&gt;
&lt;br /&gt;
===Events for HIView ===&lt;br /&gt;
&lt;br /&gt;
Two sorts of events are needed: &lt;br /&gt;
&lt;br /&gt;
*for objects (ClasskEventClassHIObject )  :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;kEventHIObjectConstruct&lt;br /&gt;
&lt;br /&gt;
kEventHIObjectInitialize&lt;br /&gt;
&lt;br /&gt;
kEventHIObjectDestruct&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*for controls themselves ( Class kEventClassControl ) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;kEventControlDraw &lt;br /&gt;
&lt;br /&gt;
kEventControlInitialize&lt;br /&gt;
&lt;br /&gt;
kEventControlHitTest&lt;br /&gt;
&lt;br /&gt;
kEventControlGetPartRegion&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Current implementation : see vcl/aqua/aquavclevents.hxx for more informations about the syntax.&lt;br /&gt;
&lt;br /&gt;
===Install Event Handler ===&lt;br /&gt;
&lt;br /&gt;
Now we have to install event Handler, inside AquaSalFrame::CreateNewSystemWindow() :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
InstallEventHandler (&lt;br /&gt;
                           GetControlEventTarget (mhView),&lt;br /&gt;
                           NewEventHandlerUPP (HandleHIViewEvent),&lt;br /&gt;
                           GetEventTypeCount (cHIViewEvent),&lt;br /&gt;
                           cHIViewEvent,&lt;br /&gt;
                           (void*)mhView, // note the use of the pointer &lt;br /&gt;
                           NULL&lt;br /&gt;
                           );&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== The HI* Event Handler ===&lt;br /&gt;
&lt;br /&gt;
The Handler is OSStatus type, and is used when events are detected.&lt;br /&gt;
&lt;br /&gt;
e.g.  : we created HandleHIViewEvent() &lt;br /&gt;
&lt;br /&gt;
using GetEventParameter, itself using the parameters described in Apple documentation. &lt;br /&gt;
&lt;br /&gt;
Code sample :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
OSStatus HandleHIViewEvent(EventHandlerCallRef inHandlerCallRef, EventRef inEvent, void* inUserData)&lt;br /&gt;
{ &lt;br /&gt;
    //lock&lt;br /&gt;
    ImplSalYieldMutexAcquire();&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    OSStatus status = noErr;&lt;br /&gt;
    &lt;br /&gt;
    // we use mrContext, global and seen from everywhere &lt;br /&gt;
    CGContextRef mrContext; &lt;br /&gt;
    &lt;br /&gt;
    // create HIRect, contianing the control bounds ( in local coordinates) &lt;br /&gt;
    HIRect bounds;  &lt;br /&gt;
&lt;br /&gt;
    status = GetEventParameter (inEvent, &lt;br /&gt;
                                kEventParamCGContextRef, &lt;br /&gt;
                                typeCGContextRef, &lt;br /&gt;
                                NULL, &lt;br /&gt;
                                sizeof (CGContextRef), &lt;br /&gt;
                                NULL, &lt;br /&gt;
                                &amp;amp;mrContext); &lt;br /&gt;
&lt;br /&gt;
    // not used, but usefull&lt;br /&gt;
    //require_noerr(status, CantGetGraphicsContext); // 2&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
    // We need to know the bounds containing the current control &lt;br /&gt;
    HIViewGetBounds ((HIViewRef) inUserData, &amp;amp;bounds); &lt;br /&gt;
&lt;br /&gt;
    // not used, but usefull&lt;br /&gt;
    //require_noerr(status, CantGetBoundingRectangle);&lt;br /&gt;
&lt;br /&gt;
    // unlock &lt;br /&gt;
    ImplSalYieldMutexRelease();&lt;br /&gt;
    &lt;br /&gt;
    return status;  &lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===HIView use in AquaSalFrame::CreateNewSystemWindow()  ===&lt;br /&gt;
&lt;br /&gt;
Code sample : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    //  TEST HIVIew part &lt;br /&gt;
    // Set mrContentView with HIView Content ViewRef&lt;br /&gt;
  &lt;br /&gt;
        HIRect myViewRect;&lt;br /&gt;
        myViewRect.origin.x = aContentRect.left; &lt;br /&gt;
        myViewRect.origin.y = aContentRect.right; &lt;br /&gt;
        myViewRect.size.width = aContentRect.right-aContentRect.left; &lt;br /&gt;
        myViewRect.size.height = aContentRect.bottom-aContentRect.top; &lt;br /&gt;
        OSStatus errval;&lt;br /&gt;
        errval = HIViewFindByID(HIViewGetRoot(mrWindow), kHIViewWindowContentID, &amp;amp;mrContentView); &lt;br /&gt;
&lt;br /&gt;
        // make the view visible                        &lt;br /&gt;
        HIViewSetVisible (mrContentView, true); &lt;br /&gt;
        &lt;br /&gt;
        // set the frame&lt;br /&gt;
        HIViewSetFrame (mrContentView, &amp;amp;myViewRect);&lt;br /&gt;
&lt;br /&gt;
        // Activate content view and children&lt;br /&gt;
        HIViewSetActivated (mrContentView,true);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Controls ===&lt;br /&gt;
&lt;br /&gt;
[FIXME]&lt;br /&gt;
&lt;br /&gt;
Example : HICombobox&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; code located in vcl/aqua/source/gdi/salnativewidgets.cxx  , where all NWF are defined &lt;br /&gt;
&lt;br /&gt;
1) declare CTRL_COMBOBOX control as &amp;quot;true&amp;quot; in isNativeControlSupported() &lt;br /&gt;
&lt;br /&gt;
2) get the control region in getNativeControlRegion() &lt;br /&gt;
&lt;br /&gt;
3) add CTRL_COMBOBOX case in drawNativeControl()&lt;br /&gt;
&lt;br /&gt;
Code sample for the last part (Warning : not yet working !! ) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 switch( nType )&lt;br /&gt;
    {&lt;br /&gt;
            &lt;br /&gt;
        case CTRL_COMBOBOX:&lt;br /&gt;
        if ( ( nPart==PART_BUTTON_DOWN) ||  (nPart==PART_SUB_EDIT) || (nPart==PART_ENTIRE_CONTROL) || (nPart==HAS_BACKGROUND_TEXTURE))&lt;br /&gt;
&lt;br /&gt;
        .... (other code ) &lt;br /&gt;
&lt;br /&gt;
                    HIViewRef myCombo;&lt;br /&gt;
                                        &lt;br /&gt;
                    HIRect rc2;&lt;br /&gt;
                    &lt;br /&gt;
                    rc2.origin.x = rControlRegion.GetBoundRect().Left();&lt;br /&gt;
                    rc2.origin.y = rControlRegion.GetBoundRect().Top();&lt;br /&gt;
                    rc2.size.width = rControlRegion.GetBoundRect().GetWidth();&lt;br /&gt;
                    rc2.size.height = rControlRegion.GetBoundRect().GetHeight();&lt;br /&gt;
                    &lt;br /&gt;
                    HIComboBoxCreate ( &amp;amp;rc2 , NULL, NULL, NULL, kHIComboBoxStandardAttributes, &amp;amp;myCombo);&lt;br /&gt;
                    &lt;br /&gt;
                    HIViewSetVisible ( myCombo, true);&lt;br /&gt;
                    HIViewAddSubview (mrView, myCombo); &lt;br /&gt;
                    &lt;br /&gt;
                    HIViewSetNeedsDisplay (myCombo, true);                   &lt;br /&gt;
                    &lt;br /&gt;
                    printf (&amp;quot;rc2.origin.x %.0f  \n rc2.origin.y %.0f \n rc2.size.width %.0f \n rc2.size.height %.0f \n&amp;quot;, &lt;br /&gt;
                    rc2.origin.x, rc2.origin.y, rc2.size.width , rc2.size.height );&lt;br /&gt;
                                        &lt;br /&gt;
                    //HIViewSetActivated (myCombo,true);&lt;br /&gt;
&lt;br /&gt;
                     .....  (other code )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usefull Links ==  &lt;br /&gt;
&lt;br /&gt;
=== References ===&lt;br /&gt;
&lt;br /&gt;
[[http://developer.apple.com/documentation/Carbon/Conceptual/HandlingWindowsControls/hitb-wind_cont_tasks/chapter_3_section_9.html Introducing HIView]]&lt;br /&gt;
&lt;br /&gt;
OverView : [[http://developer.apple.com/carbon/HIToolbox_feature.html HIToolbox]] &lt;br /&gt;
&lt;br /&gt;
HIVIew  : [[http://developer.apple.com/documentation/Carbon/Reference/HIViewReference/Reference/reference.html reference]] [[http://developer.apple.com/documentation/Carbon/Reference/HIViewReference/HIViewReference.pdf or .pdf format]]&lt;br /&gt;
&lt;br /&gt;
[[http://developer.apple.com/documentation/Carbon/Conceptual/Upgrading_HIToolbox/index.html Upgrading to HIToolbox]]&lt;br /&gt;
&lt;br /&gt;
===Code sample ===&lt;br /&gt;
&lt;br /&gt;
Build a big toy with all controls included : [http://developer.apple.com/samplecode/AppearanceSampleUpdated/listing575.html All controls + code around]&lt;br /&gt;
&lt;br /&gt;
High Level Toolbox, HIServices Release Notes : [http://developer.apple.com/releasenotes/Carbon/RN-HIToolbox/ HIToolbox]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Porting]]&lt;br /&gt;
[[Category:MacOSX]]&lt;br /&gt;
[[Category:Aqua]]&lt;/div&gt;</summary>
		<author><name>Plipli</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Mac_OS_X_Implementing_HIView&amp;diff=30757</id>
		<title>Mac OS X Implementing HIView</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Mac_OS_X_Implementing_HIView&amp;diff=30757"/>
		<updated>2007-04-25T12:58:14Z</updated>

		<summary type="html">&lt;p&gt;Plipli: /* HIFramework integration and benefits */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Contributors ==&lt;br /&gt;
&lt;br /&gt;
Eric Bachard[[http://wiki.services.openoffice.org/wiki/User:Ericb ericb]]&lt;br /&gt;
&lt;br /&gt;
Sébastien Plisson [[http://wiki.services.openoffice.org/wiki/User:Plipli plipli]]&lt;br /&gt;
&lt;br /&gt;
== Introduction == &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[DRAFT]  : means,  not yet working, work in progress ... &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
HIObject is a common base class for all user interface objects and all menus, windows, controls, toolbars, and so on, are subclasses of HIObject.&lt;br /&gt;
&lt;br /&gt;
HIView is an object-oriented view system subclassed from HIObject. All controls are implemented as HIView objects (&amp;quot;views&amp;quot;). You can easily subclass HIView classes, making it easy to implement custom controls. Over time the HIView API will replace the current Control Manager. See [[http://developer.apple.com/documentation/Carbon/Conceptual/HandlingWindowsControls/hitb-wind_cont_tasks/chapter_3_section_9.html HIView intro]]&lt;br /&gt;
&lt;br /&gt;
The main idea behind HIView is to superpose plans, to create any view, using compositing possibilities of Quartz Graphical Engine. &lt;br /&gt;
&lt;br /&gt;
The final result is the superposition of all plans, following simple rules like :&lt;br /&gt;
&lt;br /&gt;
 - The last plan is always drawn on the previous one ;&lt;br /&gt;
 - Some plans can  be declared visible, or not, very easely.&lt;br /&gt;
&lt;br /&gt;
This page is part of [[http://wiki.services.openoffice.org/wiki/Mac_OS_X_Porting_-_Native_Controls Native Controls Implementation]] and the objective is to use HIView for HIComboboxes or other HI*  controls. &lt;br /&gt;
&lt;br /&gt;
Our objective is to bind vcl controls with HI* controls, from Carbon API. &lt;br /&gt;
&lt;br /&gt;
e.g.  :  implement HICombobox as one control only.&lt;br /&gt;
&lt;br /&gt;
The generic implementation, under tests (and not fully working), uses : &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;In progress :&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;&lt;br /&gt;
- plipli : &amp;#039;&amp;#039;&amp;#039;HIFramework&amp;#039;&amp;#039;&amp;#039; integration : compiled, to be cleaned up before testing delivery to mac@porting ;&lt;br /&gt;
- ericb/ismael : salnativewidget - create and bind &amp;#039;&amp;#039;&amp;#039;native controls&amp;#039;&amp;#039;&amp;#039; (HIViews) (ericb) and &amp;#039;&amp;#039;&amp;#039;HIWindow&amp;#039;&amp;#039;&amp;#039; (ismael);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note : we &amp;quot;or&amp;quot;- ed kWindowCompositingAttribute in nWindowAttributes, to see compositing effects. &lt;br /&gt;
[FIXME] : investigate, because use this attribute causes refresh issues&lt;br /&gt;
&lt;br /&gt;
== HIFramework integration and benefits ==&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Origin&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; : Issued from Apple samples&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Pros&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; : &lt;br /&gt;
- use recent API code, &amp;lt;br&amp;gt;&lt;br /&gt;
- given with many helpers and set/getters to manage data and events&amp;lt;br&amp;gt;&lt;br /&gt;
- easily adaptable to use new services coming with Leopard (MacOSX 0.5)&amp;lt;br&amp;gt;&lt;br /&gt;
- up/down compatibility wit hdifferent MacOSX versions&amp;lt;br&amp;gt;&lt;br /&gt;
- hiobject registering system : low couplage with the utility classes of HIFramework&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Cons&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; :&lt;br /&gt;
- ?? too nice to be true :-)&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Step by step&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; :&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;1&amp;#039;&amp;#039;&amp;#039; - When any HIObject is created in salframe/salnativewidget (AquaSalFrame / AquaSalGraphics) it will be &lt;br /&gt;
registered to HIFramework base classes ;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;2a&amp;#039;&amp;#039;&amp;#039; - Being registered gives this instance of HIView/HIWindow access to helpers/setters/getters methods ;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;2b&amp;#039;&amp;#039;&amp;#039; - Event handling is highly centralized/factored : create, initialize, draw... ;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;3&amp;#039;&amp;#039;&amp;#039; - Allmost all possible data / events is covered by HIFramework and will be easily used, as new controls are implemented in salnativewidget ;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Conclusion&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; :&lt;br /&gt;
- Let&amp;#039;s clean it, test it and enjoy fastest implementation of Aqua native controls !! (GsoC fun ;-)&lt;br /&gt;
&lt;br /&gt;
== Technical principles ==&lt;br /&gt;
&lt;br /&gt;
1) OO ask to VCL / native implementation code to draw controls (ie DrawNativeControl) or images or text&lt;br /&gt;
&lt;br /&gt;
2) For controls, native implementation code create objects but do not draw them&lt;br /&gt;
For images and text, native code draw objects to context (from QDBegin) or context from HiView event&lt;br /&gt;
&lt;br /&gt;
3) When HIView events are received by event handler, especially kEventControlDraw, native code should draw controls to context given by the event&lt;br /&gt;
&lt;br /&gt;
4) Native code call needsDisplay functions to tell Quartz which zone to update&lt;br /&gt;
&lt;br /&gt;
== Current code implementation==&lt;br /&gt;
&lt;br /&gt;
===Events for HIView ===&lt;br /&gt;
&lt;br /&gt;
Two sorts of events are needed: &lt;br /&gt;
&lt;br /&gt;
*for objects (ClasskEventClassHIObject )  :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;kEventHIObjectConstruct&lt;br /&gt;
&lt;br /&gt;
kEventHIObjectInitialize&lt;br /&gt;
&lt;br /&gt;
kEventHIObjectDestruct&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*for controls themselves ( Class kEventClassControl ) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;kEventControlDraw &lt;br /&gt;
&lt;br /&gt;
kEventControlInitialize&lt;br /&gt;
&lt;br /&gt;
kEventControlHitTest&lt;br /&gt;
&lt;br /&gt;
kEventControlGetPartRegion&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Current implementation : see vcl/aqua/aquavclevents.hxx for more informations about the syntax.&lt;br /&gt;
&lt;br /&gt;
===Install Event Handler ===&lt;br /&gt;
&lt;br /&gt;
Now we have to install event Handler, inside AquaSalFrame::CreateNewSystemWindow() :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
InstallEventHandler (&lt;br /&gt;
                           GetControlEventTarget (mhView),&lt;br /&gt;
                           NewEventHandlerUPP (HandleHIViewEvent),&lt;br /&gt;
                           GetEventTypeCount (cHIViewEvent),&lt;br /&gt;
                           cHIViewEvent,&lt;br /&gt;
                           (void*)mhView, // note the use of the pointer &lt;br /&gt;
                           NULL&lt;br /&gt;
                           );&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== The HI* Event Handler ===&lt;br /&gt;
&lt;br /&gt;
The Handler is OSStatus type, and is used when events are detected.&lt;br /&gt;
&lt;br /&gt;
e.g.  : we created HandleHIViewEvent() &lt;br /&gt;
&lt;br /&gt;
using GetEventParameter, itself using the parameters described in Apple documentation. &lt;br /&gt;
&lt;br /&gt;
Code sample :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
OSStatus HandleHIViewEvent(EventHandlerCallRef inHandlerCallRef, EventRef inEvent, void* inUserData)&lt;br /&gt;
{ &lt;br /&gt;
    //lock&lt;br /&gt;
    ImplSalYieldMutexAcquire();&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    OSStatus status = noErr;&lt;br /&gt;
    &lt;br /&gt;
    // we use mrContext, global and seen from everywhere &lt;br /&gt;
    CGContextRef mrContext; &lt;br /&gt;
    &lt;br /&gt;
    // create HIRect, contianing the control bounds ( in local coordinates) &lt;br /&gt;
    HIRect bounds;  &lt;br /&gt;
&lt;br /&gt;
    status = GetEventParameter (inEvent, &lt;br /&gt;
                                kEventParamCGContextRef, &lt;br /&gt;
                                typeCGContextRef, &lt;br /&gt;
                                NULL, &lt;br /&gt;
                                sizeof (CGContextRef), &lt;br /&gt;
                                NULL, &lt;br /&gt;
                                &amp;amp;mrContext); &lt;br /&gt;
&lt;br /&gt;
    // not used, but usefull&lt;br /&gt;
    //require_noerr(status, CantGetGraphicsContext); // 2&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
    // We need to know the bounds containing the current control &lt;br /&gt;
    HIViewGetBounds ((HIViewRef) inUserData, &amp;amp;bounds); &lt;br /&gt;
&lt;br /&gt;
    // not used, but usefull&lt;br /&gt;
    //require_noerr(status, CantGetBoundingRectangle);&lt;br /&gt;
&lt;br /&gt;
    // unlock &lt;br /&gt;
    ImplSalYieldMutexRelease();&lt;br /&gt;
    &lt;br /&gt;
    return status;  &lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===HIView use in AquaSalFrame::CreateNewSystemWindow()  ===&lt;br /&gt;
&lt;br /&gt;
Code sample : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    //  TEST HIVIew part &lt;br /&gt;
    // Set mrContentView with HIView Content ViewRef&lt;br /&gt;
  &lt;br /&gt;
        HIRect myViewRect;&lt;br /&gt;
        myViewRect.origin.x = aContentRect.left; &lt;br /&gt;
        myViewRect.origin.y = aContentRect.right; &lt;br /&gt;
        myViewRect.size.width = aContentRect.right-aContentRect.left; &lt;br /&gt;
        myViewRect.size.height = aContentRect.bottom-aContentRect.top; &lt;br /&gt;
        OSStatus errval;&lt;br /&gt;
        errval = HIViewFindByID(HIViewGetRoot(mrWindow), kHIViewWindowContentID, &amp;amp;mrContentView); &lt;br /&gt;
&lt;br /&gt;
        // make the view visible                        &lt;br /&gt;
        HIViewSetVisible (mrContentView, true); &lt;br /&gt;
        &lt;br /&gt;
        // set the frame&lt;br /&gt;
        HIViewSetFrame (mrContentView, &amp;amp;myViewRect);&lt;br /&gt;
&lt;br /&gt;
        // Activate content view and children&lt;br /&gt;
        HIViewSetActivated (mrContentView,true);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Controls ===&lt;br /&gt;
&lt;br /&gt;
[FIXME]&lt;br /&gt;
&lt;br /&gt;
Example : HICombobox&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; code located in vcl/aqua/source/gdi/salnativewidgets.cxx  , where all NWF are defined &lt;br /&gt;
&lt;br /&gt;
1) declare CTRL_COMBOBOX control as &amp;quot;true&amp;quot; in isNativeControlSupported() &lt;br /&gt;
&lt;br /&gt;
2) get the control region in getNativeControlRegion() &lt;br /&gt;
&lt;br /&gt;
3) add CTRL_COMBOBOX case in drawNativeControl()&lt;br /&gt;
&lt;br /&gt;
Code sample for the last part (Warning : not yet working !! ) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 switch( nType )&lt;br /&gt;
    {&lt;br /&gt;
            &lt;br /&gt;
        case CTRL_COMBOBOX:&lt;br /&gt;
        if ( ( nPart==PART_BUTTON_DOWN) ||  (nPart==PART_SUB_EDIT) || (nPart==PART_ENTIRE_CONTROL) || (nPart==HAS_BACKGROUND_TEXTURE))&lt;br /&gt;
&lt;br /&gt;
        .... (other code ) &lt;br /&gt;
&lt;br /&gt;
                    HIViewRef myCombo;&lt;br /&gt;
                                        &lt;br /&gt;
                    HIRect rc2;&lt;br /&gt;
                    &lt;br /&gt;
                    rc2.origin.x = rControlRegion.GetBoundRect().Left();&lt;br /&gt;
                    rc2.origin.y = rControlRegion.GetBoundRect().Top();&lt;br /&gt;
                    rc2.size.width = rControlRegion.GetBoundRect().GetWidth();&lt;br /&gt;
                    rc2.size.height = rControlRegion.GetBoundRect().GetHeight();&lt;br /&gt;
                    &lt;br /&gt;
                    HIComboBoxCreate ( &amp;amp;rc2 , NULL, NULL, NULL, kHIComboBoxStandardAttributes, &amp;amp;myCombo);&lt;br /&gt;
                    &lt;br /&gt;
                    HIViewSetVisible ( myCombo, true);&lt;br /&gt;
                    HIViewAddSubview (mrView, myCombo); &lt;br /&gt;
                    &lt;br /&gt;
                    HIViewSetNeedsDisplay (myCombo, true);                   &lt;br /&gt;
                    &lt;br /&gt;
                    printf (&amp;quot;rc2.origin.x %.0f  \n rc2.origin.y %.0f \n rc2.size.width %.0f \n rc2.size.height %.0f \n&amp;quot;, &lt;br /&gt;
                    rc2.origin.x, rc2.origin.y, rc2.size.width , rc2.size.height );&lt;br /&gt;
                                        &lt;br /&gt;
                    //HIViewSetActivated (myCombo,true);&lt;br /&gt;
&lt;br /&gt;
                     .....  (other code )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usefull Links ==  &lt;br /&gt;
&lt;br /&gt;
=== References ===&lt;br /&gt;
&lt;br /&gt;
[[http://developer.apple.com/documentation/Carbon/Conceptual/HandlingWindowsControls/hitb-wind_cont_tasks/chapter_3_section_9.html Introducing HIView]]&lt;br /&gt;
&lt;br /&gt;
OverView : [[http://developer.apple.com/carbon/HIToolbox_feature.html HIToolbox]] &lt;br /&gt;
&lt;br /&gt;
HIVIew  : [[http://developer.apple.com/documentation/Carbon/Reference/HIViewReference/Reference/reference.html reference]] [[http://developer.apple.com/documentation/Carbon/Reference/HIViewReference/HIViewReference.pdf or .pdf format]]&lt;br /&gt;
&lt;br /&gt;
[[http://developer.apple.com/documentation/Carbon/Conceptual/Upgrading_HIToolbox/index.html Upgrading to HIToolbox]]&lt;br /&gt;
&lt;br /&gt;
===Code sample ===&lt;br /&gt;
&lt;br /&gt;
Build a big toy with all controls included : [http://developer.apple.com/samplecode/AppearanceSampleUpdated/listing575.html All controls + code around]&lt;br /&gt;
&lt;br /&gt;
High Level Toolbox, HIServices Release Notes : [http://developer.apple.com/releasenotes/Carbon/RN-HIToolbox/ HIToolbox]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Porting]]&lt;br /&gt;
[[Category:MacOSX]]&lt;br /&gt;
[[Category:Aqua]]&lt;/div&gt;</summary>
		<author><name>Plipli</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Mac_OS_X_Implementing_HIView&amp;diff=30756</id>
		<title>Mac OS X Implementing HIView</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Mac_OS_X_Implementing_HIView&amp;diff=30756"/>
		<updated>2007-04-25T12:57:50Z</updated>

		<summary type="html">&lt;p&gt;Plipli: /* HIFramework integration and benefits */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Contributors ==&lt;br /&gt;
&lt;br /&gt;
Eric Bachard[[http://wiki.services.openoffice.org/wiki/User:Ericb ericb]]&lt;br /&gt;
&lt;br /&gt;
Sébastien Plisson [[http://wiki.services.openoffice.org/wiki/User:Plipli plipli]]&lt;br /&gt;
&lt;br /&gt;
== Introduction == &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[DRAFT]  : means,  not yet working, work in progress ... &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
HIObject is a common base class for all user interface objects and all menus, windows, controls, toolbars, and so on, are subclasses of HIObject.&lt;br /&gt;
&lt;br /&gt;
HIView is an object-oriented view system subclassed from HIObject. All controls are implemented as HIView objects (&amp;quot;views&amp;quot;). You can easily subclass HIView classes, making it easy to implement custom controls. Over time the HIView API will replace the current Control Manager. See [[http://developer.apple.com/documentation/Carbon/Conceptual/HandlingWindowsControls/hitb-wind_cont_tasks/chapter_3_section_9.html HIView intro]]&lt;br /&gt;
&lt;br /&gt;
The main idea behind HIView is to superpose plans, to create any view, using compositing possibilities of Quartz Graphical Engine. &lt;br /&gt;
&lt;br /&gt;
The final result is the superposition of all plans, following simple rules like :&lt;br /&gt;
&lt;br /&gt;
 - The last plan is always drawn on the previous one ;&lt;br /&gt;
 - Some plans can  be declared visible, or not, very easely.&lt;br /&gt;
&lt;br /&gt;
This page is part of [[http://wiki.services.openoffice.org/wiki/Mac_OS_X_Porting_-_Native_Controls Native Controls Implementation]] and the objective is to use HIView for HIComboboxes or other HI*  controls. &lt;br /&gt;
&lt;br /&gt;
Our objective is to bind vcl controls with HI* controls, from Carbon API. &lt;br /&gt;
&lt;br /&gt;
e.g.  :  implement HICombobox as one control only.&lt;br /&gt;
&lt;br /&gt;
The generic implementation, under tests (and not fully working), uses : &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;In progress :&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;&lt;br /&gt;
- plipli : &amp;#039;&amp;#039;&amp;#039;HIFramework&amp;#039;&amp;#039;&amp;#039; integration : compiled, to be cleaned up before testing delivery to mac@porting ;&lt;br /&gt;
- ericb/ismael : salnativewidget - create and bind &amp;#039;&amp;#039;&amp;#039;native controls&amp;#039;&amp;#039;&amp;#039; (HIViews) (ericb) and &amp;#039;&amp;#039;&amp;#039;HIWindow&amp;#039;&amp;#039;&amp;#039; (ismael);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note : we &amp;quot;or&amp;quot;- ed kWindowCompositingAttribute in nWindowAttributes, to see compositing effects. &lt;br /&gt;
[FIXME] : investigate, because use this attribute causes refresh issues&lt;br /&gt;
&lt;br /&gt;
== HIFramework integration and benefits ==&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Origin&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; : Issued from Apple samples&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Pros&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; : &lt;br /&gt;
- use recent API code, &lt;br /&gt;
- given with many helpers and set/getters to manage data and events&lt;br /&gt;
- easily adaptable to use new services coming with Leopard (MacOSX 0.5)&lt;br /&gt;
- up/down compatibility wit hdifferent MacOSX versions&lt;br /&gt;
- hiobject registering system : low couplage with the utility classes of HIFramework&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Cons&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; :&lt;br /&gt;
- ?? too nice to be true :-)&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Step by step&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; :&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;1&amp;#039;&amp;#039;&amp;#039; - When any HIObject is created in salframe/salnativewidget (AquaSalFrame / AquaSalGraphics) it will be &lt;br /&gt;
registered to HIFramework base classes ;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;2a&amp;#039;&amp;#039;&amp;#039; - Being registered gives this instance of HIView/HIWindow access to helpers/setters/getters methods ;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;2b&amp;#039;&amp;#039;&amp;#039; - Event handling is highly centralized/factored : create, initialize, draw... ;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;3&amp;#039;&amp;#039;&amp;#039; - Allmost all possible data / events is covered by HIFramework and will be easily used, as new controls are implemented in salnativewidget ;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Conclusion&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; :&lt;br /&gt;
- Let&amp;#039;s clean it, test it and enjoy fastest implementation of Aqua native controls !! (GsoC fun ;-)&lt;br /&gt;
&lt;br /&gt;
== Technical principles ==&lt;br /&gt;
&lt;br /&gt;
1) OO ask to VCL / native implementation code to draw controls (ie DrawNativeControl) or images or text&lt;br /&gt;
&lt;br /&gt;
2) For controls, native implementation code create objects but do not draw them&lt;br /&gt;
For images and text, native code draw objects to context (from QDBegin) or context from HiView event&lt;br /&gt;
&lt;br /&gt;
3) When HIView events are received by event handler, especially kEventControlDraw, native code should draw controls to context given by the event&lt;br /&gt;
&lt;br /&gt;
4) Native code call needsDisplay functions to tell Quartz which zone to update&lt;br /&gt;
&lt;br /&gt;
== Current code implementation==&lt;br /&gt;
&lt;br /&gt;
===Events for HIView ===&lt;br /&gt;
&lt;br /&gt;
Two sorts of events are needed: &lt;br /&gt;
&lt;br /&gt;
*for objects (ClasskEventClassHIObject )  :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;kEventHIObjectConstruct&lt;br /&gt;
&lt;br /&gt;
kEventHIObjectInitialize&lt;br /&gt;
&lt;br /&gt;
kEventHIObjectDestruct&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*for controls themselves ( Class kEventClassControl ) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;kEventControlDraw &lt;br /&gt;
&lt;br /&gt;
kEventControlInitialize&lt;br /&gt;
&lt;br /&gt;
kEventControlHitTest&lt;br /&gt;
&lt;br /&gt;
kEventControlGetPartRegion&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Current implementation : see vcl/aqua/aquavclevents.hxx for more informations about the syntax.&lt;br /&gt;
&lt;br /&gt;
===Install Event Handler ===&lt;br /&gt;
&lt;br /&gt;
Now we have to install event Handler, inside AquaSalFrame::CreateNewSystemWindow() :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
InstallEventHandler (&lt;br /&gt;
                           GetControlEventTarget (mhView),&lt;br /&gt;
                           NewEventHandlerUPP (HandleHIViewEvent),&lt;br /&gt;
                           GetEventTypeCount (cHIViewEvent),&lt;br /&gt;
                           cHIViewEvent,&lt;br /&gt;
                           (void*)mhView, // note the use of the pointer &lt;br /&gt;
                           NULL&lt;br /&gt;
                           );&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== The HI* Event Handler ===&lt;br /&gt;
&lt;br /&gt;
The Handler is OSStatus type, and is used when events are detected.&lt;br /&gt;
&lt;br /&gt;
e.g.  : we created HandleHIViewEvent() &lt;br /&gt;
&lt;br /&gt;
using GetEventParameter, itself using the parameters described in Apple documentation. &lt;br /&gt;
&lt;br /&gt;
Code sample :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
OSStatus HandleHIViewEvent(EventHandlerCallRef inHandlerCallRef, EventRef inEvent, void* inUserData)&lt;br /&gt;
{ &lt;br /&gt;
    //lock&lt;br /&gt;
    ImplSalYieldMutexAcquire();&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    OSStatus status = noErr;&lt;br /&gt;
    &lt;br /&gt;
    // we use mrContext, global and seen from everywhere &lt;br /&gt;
    CGContextRef mrContext; &lt;br /&gt;
    &lt;br /&gt;
    // create HIRect, contianing the control bounds ( in local coordinates) &lt;br /&gt;
    HIRect bounds;  &lt;br /&gt;
&lt;br /&gt;
    status = GetEventParameter (inEvent, &lt;br /&gt;
                                kEventParamCGContextRef, &lt;br /&gt;
                                typeCGContextRef, &lt;br /&gt;
                                NULL, &lt;br /&gt;
                                sizeof (CGContextRef), &lt;br /&gt;
                                NULL, &lt;br /&gt;
                                &amp;amp;mrContext); &lt;br /&gt;
&lt;br /&gt;
    // not used, but usefull&lt;br /&gt;
    //require_noerr(status, CantGetGraphicsContext); // 2&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
    // We need to know the bounds containing the current control &lt;br /&gt;
    HIViewGetBounds ((HIViewRef) inUserData, &amp;amp;bounds); &lt;br /&gt;
&lt;br /&gt;
    // not used, but usefull&lt;br /&gt;
    //require_noerr(status, CantGetBoundingRectangle);&lt;br /&gt;
&lt;br /&gt;
    // unlock &lt;br /&gt;
    ImplSalYieldMutexRelease();&lt;br /&gt;
    &lt;br /&gt;
    return status;  &lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===HIView use in AquaSalFrame::CreateNewSystemWindow()  ===&lt;br /&gt;
&lt;br /&gt;
Code sample : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    //  TEST HIVIew part &lt;br /&gt;
    // Set mrContentView with HIView Content ViewRef&lt;br /&gt;
  &lt;br /&gt;
        HIRect myViewRect;&lt;br /&gt;
        myViewRect.origin.x = aContentRect.left; &lt;br /&gt;
        myViewRect.origin.y = aContentRect.right; &lt;br /&gt;
        myViewRect.size.width = aContentRect.right-aContentRect.left; &lt;br /&gt;
        myViewRect.size.height = aContentRect.bottom-aContentRect.top; &lt;br /&gt;
        OSStatus errval;&lt;br /&gt;
        errval = HIViewFindByID(HIViewGetRoot(mrWindow), kHIViewWindowContentID, &amp;amp;mrContentView); &lt;br /&gt;
&lt;br /&gt;
        // make the view visible                        &lt;br /&gt;
        HIViewSetVisible (mrContentView, true); &lt;br /&gt;
        &lt;br /&gt;
        // set the frame&lt;br /&gt;
        HIViewSetFrame (mrContentView, &amp;amp;myViewRect);&lt;br /&gt;
&lt;br /&gt;
        // Activate content view and children&lt;br /&gt;
        HIViewSetActivated (mrContentView,true);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Controls ===&lt;br /&gt;
&lt;br /&gt;
[FIXME]&lt;br /&gt;
&lt;br /&gt;
Example : HICombobox&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; code located in vcl/aqua/source/gdi/salnativewidgets.cxx  , where all NWF are defined &lt;br /&gt;
&lt;br /&gt;
1) declare CTRL_COMBOBOX control as &amp;quot;true&amp;quot; in isNativeControlSupported() &lt;br /&gt;
&lt;br /&gt;
2) get the control region in getNativeControlRegion() &lt;br /&gt;
&lt;br /&gt;
3) add CTRL_COMBOBOX case in drawNativeControl()&lt;br /&gt;
&lt;br /&gt;
Code sample for the last part (Warning : not yet working !! ) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 switch( nType )&lt;br /&gt;
    {&lt;br /&gt;
            &lt;br /&gt;
        case CTRL_COMBOBOX:&lt;br /&gt;
        if ( ( nPart==PART_BUTTON_DOWN) ||  (nPart==PART_SUB_EDIT) || (nPart==PART_ENTIRE_CONTROL) || (nPart==HAS_BACKGROUND_TEXTURE))&lt;br /&gt;
&lt;br /&gt;
        .... (other code ) &lt;br /&gt;
&lt;br /&gt;
                    HIViewRef myCombo;&lt;br /&gt;
                                        &lt;br /&gt;
                    HIRect rc2;&lt;br /&gt;
                    &lt;br /&gt;
                    rc2.origin.x = rControlRegion.GetBoundRect().Left();&lt;br /&gt;
                    rc2.origin.y = rControlRegion.GetBoundRect().Top();&lt;br /&gt;
                    rc2.size.width = rControlRegion.GetBoundRect().GetWidth();&lt;br /&gt;
                    rc2.size.height = rControlRegion.GetBoundRect().GetHeight();&lt;br /&gt;
                    &lt;br /&gt;
                    HIComboBoxCreate ( &amp;amp;rc2 , NULL, NULL, NULL, kHIComboBoxStandardAttributes, &amp;amp;myCombo);&lt;br /&gt;
                    &lt;br /&gt;
                    HIViewSetVisible ( myCombo, true);&lt;br /&gt;
                    HIViewAddSubview (mrView, myCombo); &lt;br /&gt;
                    &lt;br /&gt;
                    HIViewSetNeedsDisplay (myCombo, true);                   &lt;br /&gt;
                    &lt;br /&gt;
                    printf (&amp;quot;rc2.origin.x %.0f  \n rc2.origin.y %.0f \n rc2.size.width %.0f \n rc2.size.height %.0f \n&amp;quot;, &lt;br /&gt;
                    rc2.origin.x, rc2.origin.y, rc2.size.width , rc2.size.height );&lt;br /&gt;
                                        &lt;br /&gt;
                    //HIViewSetActivated (myCombo,true);&lt;br /&gt;
&lt;br /&gt;
                     .....  (other code )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usefull Links ==  &lt;br /&gt;
&lt;br /&gt;
=== References ===&lt;br /&gt;
&lt;br /&gt;
[[http://developer.apple.com/documentation/Carbon/Conceptual/HandlingWindowsControls/hitb-wind_cont_tasks/chapter_3_section_9.html Introducing HIView]]&lt;br /&gt;
&lt;br /&gt;
OverView : [[http://developer.apple.com/carbon/HIToolbox_feature.html HIToolbox]] &lt;br /&gt;
&lt;br /&gt;
HIVIew  : [[http://developer.apple.com/documentation/Carbon/Reference/HIViewReference/Reference/reference.html reference]] [[http://developer.apple.com/documentation/Carbon/Reference/HIViewReference/HIViewReference.pdf or .pdf format]]&lt;br /&gt;
&lt;br /&gt;
[[http://developer.apple.com/documentation/Carbon/Conceptual/Upgrading_HIToolbox/index.html Upgrading to HIToolbox]]&lt;br /&gt;
&lt;br /&gt;
===Code sample ===&lt;br /&gt;
&lt;br /&gt;
Build a big toy with all controls included : [http://developer.apple.com/samplecode/AppearanceSampleUpdated/listing575.html All controls + code around]&lt;br /&gt;
&lt;br /&gt;
High Level Toolbox, HIServices Release Notes : [http://developer.apple.com/releasenotes/Carbon/RN-HIToolbox/ HIToolbox]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Porting]]&lt;br /&gt;
[[Category:MacOSX]]&lt;br /&gt;
[[Category:Aqua]]&lt;/div&gt;</summary>
		<author><name>Plipli</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Mac_OS_X_Implementing_HIView&amp;diff=30755</id>
		<title>Mac OS X Implementing HIView</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Mac_OS_X_Implementing_HIView&amp;diff=30755"/>
		<updated>2007-04-25T12:57:23Z</updated>

		<summary type="html">&lt;p&gt;Plipli: /* HIFramework integration and benefits */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Contributors ==&lt;br /&gt;
&lt;br /&gt;
Eric Bachard[[http://wiki.services.openoffice.org/wiki/User:Ericb ericb]]&lt;br /&gt;
&lt;br /&gt;
Sébastien Plisson [[http://wiki.services.openoffice.org/wiki/User:Plipli plipli]]&lt;br /&gt;
&lt;br /&gt;
== Introduction == &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[DRAFT]  : means,  not yet working, work in progress ... &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
HIObject is a common base class for all user interface objects and all menus, windows, controls, toolbars, and so on, are subclasses of HIObject.&lt;br /&gt;
&lt;br /&gt;
HIView is an object-oriented view system subclassed from HIObject. All controls are implemented as HIView objects (&amp;quot;views&amp;quot;). You can easily subclass HIView classes, making it easy to implement custom controls. Over time the HIView API will replace the current Control Manager. See [[http://developer.apple.com/documentation/Carbon/Conceptual/HandlingWindowsControls/hitb-wind_cont_tasks/chapter_3_section_9.html HIView intro]]&lt;br /&gt;
&lt;br /&gt;
The main idea behind HIView is to superpose plans, to create any view, using compositing possibilities of Quartz Graphical Engine. &lt;br /&gt;
&lt;br /&gt;
The final result is the superposition of all plans, following simple rules like :&lt;br /&gt;
&lt;br /&gt;
 - The last plan is always drawn on the previous one ;&lt;br /&gt;
 - Some plans can  be declared visible, or not, very easely.&lt;br /&gt;
&lt;br /&gt;
This page is part of [[http://wiki.services.openoffice.org/wiki/Mac_OS_X_Porting_-_Native_Controls Native Controls Implementation]] and the objective is to use HIView for HIComboboxes or other HI*  controls. &lt;br /&gt;
&lt;br /&gt;
Our objective is to bind vcl controls with HI* controls, from Carbon API. &lt;br /&gt;
&lt;br /&gt;
e.g.  :  implement HICombobox as one control only.&lt;br /&gt;
&lt;br /&gt;
The generic implementation, under tests (and not fully working), uses : &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;In progress :&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;&lt;br /&gt;
- plipli : &amp;#039;&amp;#039;&amp;#039;HIFramework&amp;#039;&amp;#039;&amp;#039; integration : compiled, to be cleaned up before testing delivery to mac@porting ;&lt;br /&gt;
- ericb/ismael : salnativewidget - create and bind &amp;#039;&amp;#039;&amp;#039;native controls&amp;#039;&amp;#039;&amp;#039; (HIViews) (ericb) and &amp;#039;&amp;#039;&amp;#039;HIWindow&amp;#039;&amp;#039;&amp;#039; (ismael);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note : we &amp;quot;or&amp;quot;- ed kWindowCompositingAttribute in nWindowAttributes, to see compositing effects. &lt;br /&gt;
[FIXME] : investigate, because use this attribute causes refresh issues&lt;br /&gt;
&lt;br /&gt;
== HIFramework integration and benefits ==&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Origin&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; : Issued from Apple samples&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Pros&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; : &lt;br /&gt;
- use recent API code, &lt;br /&gt;
- given with many helpers and set/getters to manage data and events&lt;br /&gt;
- easily adaptable to use new services coming with Leopard (MacOSX 0.5)&lt;br /&gt;
- up/down compatibility wit hdifferent MacOSX versions&lt;br /&gt;
- hiobject registering system : low couplage with the utility classes of HIFramework&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Cons&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; :&lt;br /&gt;
- ?? too nice to be true :-)&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Step by step&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; :&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;1&amp;#039;&amp;#039;&amp;#039; - When any HIObject is created in salframe/salnativewidget (AquaSalFrame / AquaSalGraphics) it will be &lt;br /&gt;
registered to HIFramework base classes ;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;2a&amp;#039;&amp;#039;&amp;#039; - Being registered gives this instance of HIView/HIWindow access to helpers/setters/getters methods ;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;2b&amp;#039;&amp;#039;&amp;#039; - Event handling is highly centralized/factored : create, initialize, draw... ;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;3&amp;#039;&amp;#039;&amp;#039; - Allmost all possible data / events is covered by HIFramework and will be easily used, as new controls are implemented in salnativewidget ;&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Conclusion&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; :&lt;br /&gt;
- Let&amp;#039;s clean it, test it and enjoy fastest implementation of Aqua native controls !! (GsoC fun ;-)&lt;br /&gt;
&lt;br /&gt;
== Technical principles ==&lt;br /&gt;
&lt;br /&gt;
1) OO ask to VCL / native implementation code to draw controls (ie DrawNativeControl) or images or text&lt;br /&gt;
&lt;br /&gt;
2) For controls, native implementation code create objects but do not draw them&lt;br /&gt;
For images and text, native code draw objects to context (from QDBegin) or context from HiView event&lt;br /&gt;
&lt;br /&gt;
3) When HIView events are received by event handler, especially kEventControlDraw, native code should draw controls to context given by the event&lt;br /&gt;
&lt;br /&gt;
4) Native code call needsDisplay functions to tell Quartz which zone to update&lt;br /&gt;
&lt;br /&gt;
== Current code implementation==&lt;br /&gt;
&lt;br /&gt;
===Events for HIView ===&lt;br /&gt;
&lt;br /&gt;
Two sorts of events are needed: &lt;br /&gt;
&lt;br /&gt;
*for objects (ClasskEventClassHIObject )  :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;kEventHIObjectConstruct&lt;br /&gt;
&lt;br /&gt;
kEventHIObjectInitialize&lt;br /&gt;
&lt;br /&gt;
kEventHIObjectDestruct&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*for controls themselves ( Class kEventClassControl ) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;kEventControlDraw &lt;br /&gt;
&lt;br /&gt;
kEventControlInitialize&lt;br /&gt;
&lt;br /&gt;
kEventControlHitTest&lt;br /&gt;
&lt;br /&gt;
kEventControlGetPartRegion&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Current implementation : see vcl/aqua/aquavclevents.hxx for more informations about the syntax.&lt;br /&gt;
&lt;br /&gt;
===Install Event Handler ===&lt;br /&gt;
&lt;br /&gt;
Now we have to install event Handler, inside AquaSalFrame::CreateNewSystemWindow() :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
InstallEventHandler (&lt;br /&gt;
                           GetControlEventTarget (mhView),&lt;br /&gt;
                           NewEventHandlerUPP (HandleHIViewEvent),&lt;br /&gt;
                           GetEventTypeCount (cHIViewEvent),&lt;br /&gt;
                           cHIViewEvent,&lt;br /&gt;
                           (void*)mhView, // note the use of the pointer &lt;br /&gt;
                           NULL&lt;br /&gt;
                           );&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== The HI* Event Handler ===&lt;br /&gt;
&lt;br /&gt;
The Handler is OSStatus type, and is used when events are detected.&lt;br /&gt;
&lt;br /&gt;
e.g.  : we created HandleHIViewEvent() &lt;br /&gt;
&lt;br /&gt;
using GetEventParameter, itself using the parameters described in Apple documentation. &lt;br /&gt;
&lt;br /&gt;
Code sample :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
OSStatus HandleHIViewEvent(EventHandlerCallRef inHandlerCallRef, EventRef inEvent, void* inUserData)&lt;br /&gt;
{ &lt;br /&gt;
    //lock&lt;br /&gt;
    ImplSalYieldMutexAcquire();&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    OSStatus status = noErr;&lt;br /&gt;
    &lt;br /&gt;
    // we use mrContext, global and seen from everywhere &lt;br /&gt;
    CGContextRef mrContext; &lt;br /&gt;
    &lt;br /&gt;
    // create HIRect, contianing the control bounds ( in local coordinates) &lt;br /&gt;
    HIRect bounds;  &lt;br /&gt;
&lt;br /&gt;
    status = GetEventParameter (inEvent, &lt;br /&gt;
                                kEventParamCGContextRef, &lt;br /&gt;
                                typeCGContextRef, &lt;br /&gt;
                                NULL, &lt;br /&gt;
                                sizeof (CGContextRef), &lt;br /&gt;
                                NULL, &lt;br /&gt;
                                &amp;amp;mrContext); &lt;br /&gt;
&lt;br /&gt;
    // not used, but usefull&lt;br /&gt;
    //require_noerr(status, CantGetGraphicsContext); // 2&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
    // We need to know the bounds containing the current control &lt;br /&gt;
    HIViewGetBounds ((HIViewRef) inUserData, &amp;amp;bounds); &lt;br /&gt;
&lt;br /&gt;
    // not used, but usefull&lt;br /&gt;
    //require_noerr(status, CantGetBoundingRectangle);&lt;br /&gt;
&lt;br /&gt;
    // unlock &lt;br /&gt;
    ImplSalYieldMutexRelease();&lt;br /&gt;
    &lt;br /&gt;
    return status;  &lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===HIView use in AquaSalFrame::CreateNewSystemWindow()  ===&lt;br /&gt;
&lt;br /&gt;
Code sample : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    //  TEST HIVIew part &lt;br /&gt;
    // Set mrContentView with HIView Content ViewRef&lt;br /&gt;
  &lt;br /&gt;
        HIRect myViewRect;&lt;br /&gt;
        myViewRect.origin.x = aContentRect.left; &lt;br /&gt;
        myViewRect.origin.y = aContentRect.right; &lt;br /&gt;
        myViewRect.size.width = aContentRect.right-aContentRect.left; &lt;br /&gt;
        myViewRect.size.height = aContentRect.bottom-aContentRect.top; &lt;br /&gt;
        OSStatus errval;&lt;br /&gt;
        errval = HIViewFindByID(HIViewGetRoot(mrWindow), kHIViewWindowContentID, &amp;amp;mrContentView); &lt;br /&gt;
&lt;br /&gt;
        // make the view visible                        &lt;br /&gt;
        HIViewSetVisible (mrContentView, true); &lt;br /&gt;
        &lt;br /&gt;
        // set the frame&lt;br /&gt;
        HIViewSetFrame (mrContentView, &amp;amp;myViewRect);&lt;br /&gt;
&lt;br /&gt;
        // Activate content view and children&lt;br /&gt;
        HIViewSetActivated (mrContentView,true);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Controls ===&lt;br /&gt;
&lt;br /&gt;
[FIXME]&lt;br /&gt;
&lt;br /&gt;
Example : HICombobox&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; code located in vcl/aqua/source/gdi/salnativewidgets.cxx  , where all NWF are defined &lt;br /&gt;
&lt;br /&gt;
1) declare CTRL_COMBOBOX control as &amp;quot;true&amp;quot; in isNativeControlSupported() &lt;br /&gt;
&lt;br /&gt;
2) get the control region in getNativeControlRegion() &lt;br /&gt;
&lt;br /&gt;
3) add CTRL_COMBOBOX case in drawNativeControl()&lt;br /&gt;
&lt;br /&gt;
Code sample for the last part (Warning : not yet working !! ) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 switch( nType )&lt;br /&gt;
    {&lt;br /&gt;
            &lt;br /&gt;
        case CTRL_COMBOBOX:&lt;br /&gt;
        if ( ( nPart==PART_BUTTON_DOWN) ||  (nPart==PART_SUB_EDIT) || (nPart==PART_ENTIRE_CONTROL) || (nPart==HAS_BACKGROUND_TEXTURE))&lt;br /&gt;
&lt;br /&gt;
        .... (other code ) &lt;br /&gt;
&lt;br /&gt;
                    HIViewRef myCombo;&lt;br /&gt;
                                        &lt;br /&gt;
                    HIRect rc2;&lt;br /&gt;
                    &lt;br /&gt;
                    rc2.origin.x = rControlRegion.GetBoundRect().Left();&lt;br /&gt;
                    rc2.origin.y = rControlRegion.GetBoundRect().Top();&lt;br /&gt;
                    rc2.size.width = rControlRegion.GetBoundRect().GetWidth();&lt;br /&gt;
                    rc2.size.height = rControlRegion.GetBoundRect().GetHeight();&lt;br /&gt;
                    &lt;br /&gt;
                    HIComboBoxCreate ( &amp;amp;rc2 , NULL, NULL, NULL, kHIComboBoxStandardAttributes, &amp;amp;myCombo);&lt;br /&gt;
                    &lt;br /&gt;
                    HIViewSetVisible ( myCombo, true);&lt;br /&gt;
                    HIViewAddSubview (mrView, myCombo); &lt;br /&gt;
                    &lt;br /&gt;
                    HIViewSetNeedsDisplay (myCombo, true);                   &lt;br /&gt;
                    &lt;br /&gt;
                    printf (&amp;quot;rc2.origin.x %.0f  \n rc2.origin.y %.0f \n rc2.size.width %.0f \n rc2.size.height %.0f \n&amp;quot;, &lt;br /&gt;
                    rc2.origin.x, rc2.origin.y, rc2.size.width , rc2.size.height );&lt;br /&gt;
                                        &lt;br /&gt;
                    //HIViewSetActivated (myCombo,true);&lt;br /&gt;
&lt;br /&gt;
                     .....  (other code )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usefull Links ==  &lt;br /&gt;
&lt;br /&gt;
=== References ===&lt;br /&gt;
&lt;br /&gt;
[[http://developer.apple.com/documentation/Carbon/Conceptual/HandlingWindowsControls/hitb-wind_cont_tasks/chapter_3_section_9.html Introducing HIView]]&lt;br /&gt;
&lt;br /&gt;
OverView : [[http://developer.apple.com/carbon/HIToolbox_feature.html HIToolbox]] &lt;br /&gt;
&lt;br /&gt;
HIVIew  : [[http://developer.apple.com/documentation/Carbon/Reference/HIViewReference/Reference/reference.html reference]] [[http://developer.apple.com/documentation/Carbon/Reference/HIViewReference/HIViewReference.pdf or .pdf format]]&lt;br /&gt;
&lt;br /&gt;
[[http://developer.apple.com/documentation/Carbon/Conceptual/Upgrading_HIToolbox/index.html Upgrading to HIToolbox]]&lt;br /&gt;
&lt;br /&gt;
===Code sample ===&lt;br /&gt;
&lt;br /&gt;
Build a big toy with all controls included : [http://developer.apple.com/samplecode/AppearanceSampleUpdated/listing575.html All controls + code around]&lt;br /&gt;
&lt;br /&gt;
High Level Toolbox, HIServices Release Notes : [http://developer.apple.com/releasenotes/Carbon/RN-HIToolbox/ HIToolbox]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Porting]]&lt;br /&gt;
[[Category:MacOSX]]&lt;br /&gt;
[[Category:Aqua]]&lt;/div&gt;</summary>
		<author><name>Plipli</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Mac_OS_X_Implementing_HIView&amp;diff=30754</id>
		<title>Mac OS X Implementing HIView</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Mac_OS_X_Implementing_HIView&amp;diff=30754"/>
		<updated>2007-04-25T12:56:58Z</updated>

		<summary type="html">&lt;p&gt;Plipli: /* HIFramework integration and benefits */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Contributors ==&lt;br /&gt;
&lt;br /&gt;
Eric Bachard[[http://wiki.services.openoffice.org/wiki/User:Ericb ericb]]&lt;br /&gt;
&lt;br /&gt;
Sébastien Plisson [[http://wiki.services.openoffice.org/wiki/User:Plipli plipli]]&lt;br /&gt;
&lt;br /&gt;
== Introduction == &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[DRAFT]  : means,  not yet working, work in progress ... &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
HIObject is a common base class for all user interface objects and all menus, windows, controls, toolbars, and so on, are subclasses of HIObject.&lt;br /&gt;
&lt;br /&gt;
HIView is an object-oriented view system subclassed from HIObject. All controls are implemented as HIView objects (&amp;quot;views&amp;quot;). You can easily subclass HIView classes, making it easy to implement custom controls. Over time the HIView API will replace the current Control Manager. See [[http://developer.apple.com/documentation/Carbon/Conceptual/HandlingWindowsControls/hitb-wind_cont_tasks/chapter_3_section_9.html HIView intro]]&lt;br /&gt;
&lt;br /&gt;
The main idea behind HIView is to superpose plans, to create any view, using compositing possibilities of Quartz Graphical Engine. &lt;br /&gt;
&lt;br /&gt;
The final result is the superposition of all plans, following simple rules like :&lt;br /&gt;
&lt;br /&gt;
 - The last plan is always drawn on the previous one ;&lt;br /&gt;
 - Some plans can  be declared visible, or not, very easely.&lt;br /&gt;
&lt;br /&gt;
This page is part of [[http://wiki.services.openoffice.org/wiki/Mac_OS_X_Porting_-_Native_Controls Native Controls Implementation]] and the objective is to use HIView for HIComboboxes or other HI*  controls. &lt;br /&gt;
&lt;br /&gt;
Our objective is to bind vcl controls with HI* controls, from Carbon API. &lt;br /&gt;
&lt;br /&gt;
e.g.  :  implement HICombobox as one control only.&lt;br /&gt;
&lt;br /&gt;
The generic implementation, under tests (and not fully working), uses : &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;In progress :&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;&lt;br /&gt;
- plipli : &amp;#039;&amp;#039;&amp;#039;HIFramework&amp;#039;&amp;#039;&amp;#039; integration : compiled, to be cleaned up before testing delivery to mac@porting ;&lt;br /&gt;
- ericb/ismael : salnativewidget - create and bind &amp;#039;&amp;#039;&amp;#039;native controls&amp;#039;&amp;#039;&amp;#039; (HIViews) (ericb) and &amp;#039;&amp;#039;&amp;#039;HIWindow&amp;#039;&amp;#039;&amp;#039; (ismael);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note : we &amp;quot;or&amp;quot;- ed kWindowCompositingAttribute in nWindowAttributes, to see compositing effects. &lt;br /&gt;
[FIXME] : investigate, because use this attribute causes refresh issues&lt;br /&gt;
&lt;br /&gt;
== HIFramework integration and benefits ==&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Origin&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; : Issued from Apple samples&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Pros&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; : &lt;br /&gt;
- use recent API code, &lt;br /&gt;
- given with many helpers and set/getters to manage data and events&lt;br /&gt;
- easily adaptable to use new services coming with Leopard (MacOSX 0.5)&lt;br /&gt;
- up/down compatibility wit hdifferent MacOSX versions&lt;br /&gt;
- hiobject registering system : low couplage with the utility classes of HIFramework&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Cons&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; :&lt;br /&gt;
- ?? too nice to be true :-)&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Step by step&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; :&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;1&amp;#039;&amp;#039;&amp;#039; - When any HIObject is created in salframe/salnativewidget (AquaSalFrame / AquaSalGraphics) it will be &lt;br /&gt;
registered to HIFramework base classes&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;2a&amp;#039;&amp;#039;&amp;#039; - Being registered gives this instance of HIView/HIWindow access to helpers/setters/getters methods&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;2b&amp;#039;&amp;#039;&amp;#039; - Event handling is highly centralized/factored : create, initialize, draw...&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;3&amp;#039;&amp;#039;&amp;#039; - Allmost all possible data / events is covered by HIFramework and will be easily used, as new controls are implemented in salnativewidget&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Conclusion&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; :&lt;br /&gt;
- Let&amp;#039;s clean it, test it and enjoy fastest implementation of Aqua native controls !! (GsoC fun ;-)&lt;br /&gt;
&lt;br /&gt;
== Technical principles ==&lt;br /&gt;
&lt;br /&gt;
1) OO ask to VCL / native implementation code to draw controls (ie DrawNativeControl) or images or text&lt;br /&gt;
&lt;br /&gt;
2) For controls, native implementation code create objects but do not draw them&lt;br /&gt;
For images and text, native code draw objects to context (from QDBegin) or context from HiView event&lt;br /&gt;
&lt;br /&gt;
3) When HIView events are received by event handler, especially kEventControlDraw, native code should draw controls to context given by the event&lt;br /&gt;
&lt;br /&gt;
4) Native code call needsDisplay functions to tell Quartz which zone to update&lt;br /&gt;
&lt;br /&gt;
== Current code implementation==&lt;br /&gt;
&lt;br /&gt;
===Events for HIView ===&lt;br /&gt;
&lt;br /&gt;
Two sorts of events are needed: &lt;br /&gt;
&lt;br /&gt;
*for objects (ClasskEventClassHIObject )  :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;kEventHIObjectConstruct&lt;br /&gt;
&lt;br /&gt;
kEventHIObjectInitialize&lt;br /&gt;
&lt;br /&gt;
kEventHIObjectDestruct&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*for controls themselves ( Class kEventClassControl ) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;kEventControlDraw &lt;br /&gt;
&lt;br /&gt;
kEventControlInitialize&lt;br /&gt;
&lt;br /&gt;
kEventControlHitTest&lt;br /&gt;
&lt;br /&gt;
kEventControlGetPartRegion&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Current implementation : see vcl/aqua/aquavclevents.hxx for more informations about the syntax.&lt;br /&gt;
&lt;br /&gt;
===Install Event Handler ===&lt;br /&gt;
&lt;br /&gt;
Now we have to install event Handler, inside AquaSalFrame::CreateNewSystemWindow() :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
InstallEventHandler (&lt;br /&gt;
                           GetControlEventTarget (mhView),&lt;br /&gt;
                           NewEventHandlerUPP (HandleHIViewEvent),&lt;br /&gt;
                           GetEventTypeCount (cHIViewEvent),&lt;br /&gt;
                           cHIViewEvent,&lt;br /&gt;
                           (void*)mhView, // note the use of the pointer &lt;br /&gt;
                           NULL&lt;br /&gt;
                           );&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== The HI* Event Handler ===&lt;br /&gt;
&lt;br /&gt;
The Handler is OSStatus type, and is used when events are detected.&lt;br /&gt;
&lt;br /&gt;
e.g.  : we created HandleHIViewEvent() &lt;br /&gt;
&lt;br /&gt;
using GetEventParameter, itself using the parameters described in Apple documentation. &lt;br /&gt;
&lt;br /&gt;
Code sample :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
OSStatus HandleHIViewEvent(EventHandlerCallRef inHandlerCallRef, EventRef inEvent, void* inUserData)&lt;br /&gt;
{ &lt;br /&gt;
    //lock&lt;br /&gt;
    ImplSalYieldMutexAcquire();&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    OSStatus status = noErr;&lt;br /&gt;
    &lt;br /&gt;
    // we use mrContext, global and seen from everywhere &lt;br /&gt;
    CGContextRef mrContext; &lt;br /&gt;
    &lt;br /&gt;
    // create HIRect, contianing the control bounds ( in local coordinates) &lt;br /&gt;
    HIRect bounds;  &lt;br /&gt;
&lt;br /&gt;
    status = GetEventParameter (inEvent, &lt;br /&gt;
                                kEventParamCGContextRef, &lt;br /&gt;
                                typeCGContextRef, &lt;br /&gt;
                                NULL, &lt;br /&gt;
                                sizeof (CGContextRef), &lt;br /&gt;
                                NULL, &lt;br /&gt;
                                &amp;amp;mrContext); &lt;br /&gt;
&lt;br /&gt;
    // not used, but usefull&lt;br /&gt;
    //require_noerr(status, CantGetGraphicsContext); // 2&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
    // We need to know the bounds containing the current control &lt;br /&gt;
    HIViewGetBounds ((HIViewRef) inUserData, &amp;amp;bounds); &lt;br /&gt;
&lt;br /&gt;
    // not used, but usefull&lt;br /&gt;
    //require_noerr(status, CantGetBoundingRectangle);&lt;br /&gt;
&lt;br /&gt;
    // unlock &lt;br /&gt;
    ImplSalYieldMutexRelease();&lt;br /&gt;
    &lt;br /&gt;
    return status;  &lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===HIView use in AquaSalFrame::CreateNewSystemWindow()  ===&lt;br /&gt;
&lt;br /&gt;
Code sample : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    //  TEST HIVIew part &lt;br /&gt;
    // Set mrContentView with HIView Content ViewRef&lt;br /&gt;
  &lt;br /&gt;
        HIRect myViewRect;&lt;br /&gt;
        myViewRect.origin.x = aContentRect.left; &lt;br /&gt;
        myViewRect.origin.y = aContentRect.right; &lt;br /&gt;
        myViewRect.size.width = aContentRect.right-aContentRect.left; &lt;br /&gt;
        myViewRect.size.height = aContentRect.bottom-aContentRect.top; &lt;br /&gt;
        OSStatus errval;&lt;br /&gt;
        errval = HIViewFindByID(HIViewGetRoot(mrWindow), kHIViewWindowContentID, &amp;amp;mrContentView); &lt;br /&gt;
&lt;br /&gt;
        // make the view visible                        &lt;br /&gt;
        HIViewSetVisible (mrContentView, true); &lt;br /&gt;
        &lt;br /&gt;
        // set the frame&lt;br /&gt;
        HIViewSetFrame (mrContentView, &amp;amp;myViewRect);&lt;br /&gt;
&lt;br /&gt;
        // Activate content view and children&lt;br /&gt;
        HIViewSetActivated (mrContentView,true);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Controls ===&lt;br /&gt;
&lt;br /&gt;
[FIXME]&lt;br /&gt;
&lt;br /&gt;
Example : HICombobox&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; code located in vcl/aqua/source/gdi/salnativewidgets.cxx  , where all NWF are defined &lt;br /&gt;
&lt;br /&gt;
1) declare CTRL_COMBOBOX control as &amp;quot;true&amp;quot; in isNativeControlSupported() &lt;br /&gt;
&lt;br /&gt;
2) get the control region in getNativeControlRegion() &lt;br /&gt;
&lt;br /&gt;
3) add CTRL_COMBOBOX case in drawNativeControl()&lt;br /&gt;
&lt;br /&gt;
Code sample for the last part (Warning : not yet working !! ) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 switch( nType )&lt;br /&gt;
    {&lt;br /&gt;
            &lt;br /&gt;
        case CTRL_COMBOBOX:&lt;br /&gt;
        if ( ( nPart==PART_BUTTON_DOWN) ||  (nPart==PART_SUB_EDIT) || (nPart==PART_ENTIRE_CONTROL) || (nPart==HAS_BACKGROUND_TEXTURE))&lt;br /&gt;
&lt;br /&gt;
        .... (other code ) &lt;br /&gt;
&lt;br /&gt;
                    HIViewRef myCombo;&lt;br /&gt;
                                        &lt;br /&gt;
                    HIRect rc2;&lt;br /&gt;
                    &lt;br /&gt;
                    rc2.origin.x = rControlRegion.GetBoundRect().Left();&lt;br /&gt;
                    rc2.origin.y = rControlRegion.GetBoundRect().Top();&lt;br /&gt;
                    rc2.size.width = rControlRegion.GetBoundRect().GetWidth();&lt;br /&gt;
                    rc2.size.height = rControlRegion.GetBoundRect().GetHeight();&lt;br /&gt;
                    &lt;br /&gt;
                    HIComboBoxCreate ( &amp;amp;rc2 , NULL, NULL, NULL, kHIComboBoxStandardAttributes, &amp;amp;myCombo);&lt;br /&gt;
                    &lt;br /&gt;
                    HIViewSetVisible ( myCombo, true);&lt;br /&gt;
                    HIViewAddSubview (mrView, myCombo); &lt;br /&gt;
                    &lt;br /&gt;
                    HIViewSetNeedsDisplay (myCombo, true);                   &lt;br /&gt;
                    &lt;br /&gt;
                    printf (&amp;quot;rc2.origin.x %.0f  \n rc2.origin.y %.0f \n rc2.size.width %.0f \n rc2.size.height %.0f \n&amp;quot;, &lt;br /&gt;
                    rc2.origin.x, rc2.origin.y, rc2.size.width , rc2.size.height );&lt;br /&gt;
                                        &lt;br /&gt;
                    //HIViewSetActivated (myCombo,true);&lt;br /&gt;
&lt;br /&gt;
                     .....  (other code )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usefull Links ==  &lt;br /&gt;
&lt;br /&gt;
=== References ===&lt;br /&gt;
&lt;br /&gt;
[[http://developer.apple.com/documentation/Carbon/Conceptual/HandlingWindowsControls/hitb-wind_cont_tasks/chapter_3_section_9.html Introducing HIView]]&lt;br /&gt;
&lt;br /&gt;
OverView : [[http://developer.apple.com/carbon/HIToolbox_feature.html HIToolbox]] &lt;br /&gt;
&lt;br /&gt;
HIVIew  : [[http://developer.apple.com/documentation/Carbon/Reference/HIViewReference/Reference/reference.html reference]] [[http://developer.apple.com/documentation/Carbon/Reference/HIViewReference/HIViewReference.pdf or .pdf format]]&lt;br /&gt;
&lt;br /&gt;
[[http://developer.apple.com/documentation/Carbon/Conceptual/Upgrading_HIToolbox/index.html Upgrading to HIToolbox]]&lt;br /&gt;
&lt;br /&gt;
===Code sample ===&lt;br /&gt;
&lt;br /&gt;
Build a big toy with all controls included : [http://developer.apple.com/samplecode/AppearanceSampleUpdated/listing575.html All controls + code around]&lt;br /&gt;
&lt;br /&gt;
High Level Toolbox, HIServices Release Notes : [http://developer.apple.com/releasenotes/Carbon/RN-HIToolbox/ HIToolbox]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Porting]]&lt;br /&gt;
[[Category:MacOSX]]&lt;br /&gt;
[[Category:Aqua]]&lt;/div&gt;</summary>
		<author><name>Plipli</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Mac_OS_X_Implementing_HIView&amp;diff=30753</id>
		<title>Mac OS X Implementing HIView</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Mac_OS_X_Implementing_HIView&amp;diff=30753"/>
		<updated>2007-04-25T12:55:36Z</updated>

		<summary type="html">&lt;p&gt;Plipli: /* VCL / AQUA traces deductions (ericb) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Contributors ==&lt;br /&gt;
&lt;br /&gt;
Eric Bachard[[http://wiki.services.openoffice.org/wiki/User:Ericb ericb]]&lt;br /&gt;
&lt;br /&gt;
Sébastien Plisson [[http://wiki.services.openoffice.org/wiki/User:Plipli plipli]]&lt;br /&gt;
&lt;br /&gt;
== Introduction == &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[DRAFT]  : means,  not yet working, work in progress ... &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
HIObject is a common base class for all user interface objects and all menus, windows, controls, toolbars, and so on, are subclasses of HIObject.&lt;br /&gt;
&lt;br /&gt;
HIView is an object-oriented view system subclassed from HIObject. All controls are implemented as HIView objects (&amp;quot;views&amp;quot;). You can easily subclass HIView classes, making it easy to implement custom controls. Over time the HIView API will replace the current Control Manager. See [[http://developer.apple.com/documentation/Carbon/Conceptual/HandlingWindowsControls/hitb-wind_cont_tasks/chapter_3_section_9.html HIView intro]]&lt;br /&gt;
&lt;br /&gt;
The main idea behind HIView is to superpose plans, to create any view, using compositing possibilities of Quartz Graphical Engine. &lt;br /&gt;
&lt;br /&gt;
The final result is the superposition of all plans, following simple rules like :&lt;br /&gt;
&lt;br /&gt;
 - The last plan is always drawn on the previous one ;&lt;br /&gt;
 - Some plans can  be declared visible, or not, very easely.&lt;br /&gt;
&lt;br /&gt;
This page is part of [[http://wiki.services.openoffice.org/wiki/Mac_OS_X_Porting_-_Native_Controls Native Controls Implementation]] and the objective is to use HIView for HIComboboxes or other HI*  controls. &lt;br /&gt;
&lt;br /&gt;
Our objective is to bind vcl controls with HI* controls, from Carbon API. &lt;br /&gt;
&lt;br /&gt;
e.g.  :  implement HICombobox as one control only.&lt;br /&gt;
&lt;br /&gt;
The generic implementation, under tests (and not fully working), uses : &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;In progress :&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;&lt;br /&gt;
- plipli : &amp;#039;&amp;#039;&amp;#039;HIFramework&amp;#039;&amp;#039;&amp;#039; integration : compiled, to be cleaned up before testing delivery to mac@porting ;&lt;br /&gt;
- ericb/ismael : salnativewidget - create and bind &amp;#039;&amp;#039;&amp;#039;native controls&amp;#039;&amp;#039;&amp;#039; (HIViews) (ericb) and &amp;#039;&amp;#039;&amp;#039;HIWindow&amp;#039;&amp;#039;&amp;#039; (ismael);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note : we &amp;quot;or&amp;quot;- ed kWindowCompositingAttribute in nWindowAttributes, to see compositing effects. &lt;br /&gt;
[FIXME] : investigate, because use this attribute causes refresh issues&lt;br /&gt;
&lt;br /&gt;
== HIFramework integration and benefits ==&lt;br /&gt;
&lt;br /&gt;
* Origin : Issued from Apple samples&lt;br /&gt;
&lt;br /&gt;
* Pros : &lt;br /&gt;
- use recent API code, &lt;br /&gt;
- given with many helpers and set/getters to manage data and events&lt;br /&gt;
- easily adaptable to use new services coming with Leopard (MacOSX 0.5)&lt;br /&gt;
- up/down compatibility wit hdifferent MacOSX versions&lt;br /&gt;
- hiobject registering system : low couplage with the utility classes of HIFramework&lt;br /&gt;
&lt;br /&gt;
* Cons :&lt;br /&gt;
- ?? too nice to be true :-)&lt;br /&gt;
&lt;br /&gt;
* Step by step :&lt;br /&gt;
1 - When any HIObject is created in salframe/salnativewidget (AquaSalFrame / AquaSalGraphics) it will be &lt;br /&gt;
registered to HIFramework base classes&lt;br /&gt;
2a - Being registered gives this instance of HIView/HIWindow access to helpers/setters/getters methods&lt;br /&gt;
2b - Event handling is highly centralized/factored : create, initialize, draw...&lt;br /&gt;
3 - Allmost all possible data / events is covered by HIFramework and will be easily used, as new controls are implemented in salnativewidget&lt;br /&gt;
&lt;br /&gt;
* Conclusion :&lt;br /&gt;
- Let&amp;#039;s clean it, test it and enjoy fastest implementation of Aqua native controls !! (GsoC fun ;-)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Technical principles ==&lt;br /&gt;
&lt;br /&gt;
1) OO ask to VCL / native implementation code to draw controls (ie DrawNativeControl) or images or text&lt;br /&gt;
&lt;br /&gt;
2) For controls, native implementation code create objects but do not draw them&lt;br /&gt;
For images and text, native code draw objects to context (from QDBegin) or context from HiView event&lt;br /&gt;
&lt;br /&gt;
3) When HIView events are received by event handler, especially kEventControlDraw, native code should draw controls to context given by the event&lt;br /&gt;
&lt;br /&gt;
4) Native code call needsDisplay functions to tell Quartz which zone to update&lt;br /&gt;
&lt;br /&gt;
== Current code implementation==&lt;br /&gt;
&lt;br /&gt;
===Events for HIView ===&lt;br /&gt;
&lt;br /&gt;
Two sorts of events are needed: &lt;br /&gt;
&lt;br /&gt;
*for objects (ClasskEventClassHIObject )  :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;kEventHIObjectConstruct&lt;br /&gt;
&lt;br /&gt;
kEventHIObjectInitialize&lt;br /&gt;
&lt;br /&gt;
kEventHIObjectDestruct&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*for controls themselves ( Class kEventClassControl ) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;kEventControlDraw &lt;br /&gt;
&lt;br /&gt;
kEventControlInitialize&lt;br /&gt;
&lt;br /&gt;
kEventControlHitTest&lt;br /&gt;
&lt;br /&gt;
kEventControlGetPartRegion&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Current implementation : see vcl/aqua/aquavclevents.hxx for more informations about the syntax.&lt;br /&gt;
&lt;br /&gt;
===Install Event Handler ===&lt;br /&gt;
&lt;br /&gt;
Now we have to install event Handler, inside AquaSalFrame::CreateNewSystemWindow() :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
InstallEventHandler (&lt;br /&gt;
                           GetControlEventTarget (mhView),&lt;br /&gt;
                           NewEventHandlerUPP (HandleHIViewEvent),&lt;br /&gt;
                           GetEventTypeCount (cHIViewEvent),&lt;br /&gt;
                           cHIViewEvent,&lt;br /&gt;
                           (void*)mhView, // note the use of the pointer &lt;br /&gt;
                           NULL&lt;br /&gt;
                           );&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== The HI* Event Handler ===&lt;br /&gt;
&lt;br /&gt;
The Handler is OSStatus type, and is used when events are detected.&lt;br /&gt;
&lt;br /&gt;
e.g.  : we created HandleHIViewEvent() &lt;br /&gt;
&lt;br /&gt;
using GetEventParameter, itself using the parameters described in Apple documentation. &lt;br /&gt;
&lt;br /&gt;
Code sample :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
OSStatus HandleHIViewEvent(EventHandlerCallRef inHandlerCallRef, EventRef inEvent, void* inUserData)&lt;br /&gt;
{ &lt;br /&gt;
    //lock&lt;br /&gt;
    ImplSalYieldMutexAcquire();&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    OSStatus status = noErr;&lt;br /&gt;
    &lt;br /&gt;
    // we use mrContext, global and seen from everywhere &lt;br /&gt;
    CGContextRef mrContext; &lt;br /&gt;
    &lt;br /&gt;
    // create HIRect, contianing the control bounds ( in local coordinates) &lt;br /&gt;
    HIRect bounds;  &lt;br /&gt;
&lt;br /&gt;
    status = GetEventParameter (inEvent, &lt;br /&gt;
                                kEventParamCGContextRef, &lt;br /&gt;
                                typeCGContextRef, &lt;br /&gt;
                                NULL, &lt;br /&gt;
                                sizeof (CGContextRef), &lt;br /&gt;
                                NULL, &lt;br /&gt;
                                &amp;amp;mrContext); &lt;br /&gt;
&lt;br /&gt;
    // not used, but usefull&lt;br /&gt;
    //require_noerr(status, CantGetGraphicsContext); // 2&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
    // We need to know the bounds containing the current control &lt;br /&gt;
    HIViewGetBounds ((HIViewRef) inUserData, &amp;amp;bounds); &lt;br /&gt;
&lt;br /&gt;
    // not used, but usefull&lt;br /&gt;
    //require_noerr(status, CantGetBoundingRectangle);&lt;br /&gt;
&lt;br /&gt;
    // unlock &lt;br /&gt;
    ImplSalYieldMutexRelease();&lt;br /&gt;
    &lt;br /&gt;
    return status;  &lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===HIView use in AquaSalFrame::CreateNewSystemWindow()  ===&lt;br /&gt;
&lt;br /&gt;
Code sample : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    //  TEST HIVIew part &lt;br /&gt;
    // Set mrContentView with HIView Content ViewRef&lt;br /&gt;
  &lt;br /&gt;
        HIRect myViewRect;&lt;br /&gt;
        myViewRect.origin.x = aContentRect.left; &lt;br /&gt;
        myViewRect.origin.y = aContentRect.right; &lt;br /&gt;
        myViewRect.size.width = aContentRect.right-aContentRect.left; &lt;br /&gt;
        myViewRect.size.height = aContentRect.bottom-aContentRect.top; &lt;br /&gt;
        OSStatus errval;&lt;br /&gt;
        errval = HIViewFindByID(HIViewGetRoot(mrWindow), kHIViewWindowContentID, &amp;amp;mrContentView); &lt;br /&gt;
&lt;br /&gt;
        // make the view visible                        &lt;br /&gt;
        HIViewSetVisible (mrContentView, true); &lt;br /&gt;
        &lt;br /&gt;
        // set the frame&lt;br /&gt;
        HIViewSetFrame (mrContentView, &amp;amp;myViewRect);&lt;br /&gt;
&lt;br /&gt;
        // Activate content view and children&lt;br /&gt;
        HIViewSetActivated (mrContentView,true);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Controls ===&lt;br /&gt;
&lt;br /&gt;
[FIXME]&lt;br /&gt;
&lt;br /&gt;
Example : HICombobox&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; code located in vcl/aqua/source/gdi/salnativewidgets.cxx  , where all NWF are defined &lt;br /&gt;
&lt;br /&gt;
1) declare CTRL_COMBOBOX control as &amp;quot;true&amp;quot; in isNativeControlSupported() &lt;br /&gt;
&lt;br /&gt;
2) get the control region in getNativeControlRegion() &lt;br /&gt;
&lt;br /&gt;
3) add CTRL_COMBOBOX case in drawNativeControl()&lt;br /&gt;
&lt;br /&gt;
Code sample for the last part (Warning : not yet working !! ) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 switch( nType )&lt;br /&gt;
    {&lt;br /&gt;
            &lt;br /&gt;
        case CTRL_COMBOBOX:&lt;br /&gt;
        if ( ( nPart==PART_BUTTON_DOWN) ||  (nPart==PART_SUB_EDIT) || (nPart==PART_ENTIRE_CONTROL) || (nPart==HAS_BACKGROUND_TEXTURE))&lt;br /&gt;
&lt;br /&gt;
        .... (other code ) &lt;br /&gt;
&lt;br /&gt;
                    HIViewRef myCombo;&lt;br /&gt;
                                        &lt;br /&gt;
                    HIRect rc2;&lt;br /&gt;
                    &lt;br /&gt;
                    rc2.origin.x = rControlRegion.GetBoundRect().Left();&lt;br /&gt;
                    rc2.origin.y = rControlRegion.GetBoundRect().Top();&lt;br /&gt;
                    rc2.size.width = rControlRegion.GetBoundRect().GetWidth();&lt;br /&gt;
                    rc2.size.height = rControlRegion.GetBoundRect().GetHeight();&lt;br /&gt;
                    &lt;br /&gt;
                    HIComboBoxCreate ( &amp;amp;rc2 , NULL, NULL, NULL, kHIComboBoxStandardAttributes, &amp;amp;myCombo);&lt;br /&gt;
                    &lt;br /&gt;
                    HIViewSetVisible ( myCombo, true);&lt;br /&gt;
                    HIViewAddSubview (mrView, myCombo); &lt;br /&gt;
                    &lt;br /&gt;
                    HIViewSetNeedsDisplay (myCombo, true);                   &lt;br /&gt;
                    &lt;br /&gt;
                    printf (&amp;quot;rc2.origin.x %.0f  \n rc2.origin.y %.0f \n rc2.size.width %.0f \n rc2.size.height %.0f \n&amp;quot;, &lt;br /&gt;
                    rc2.origin.x, rc2.origin.y, rc2.size.width , rc2.size.height );&lt;br /&gt;
                                        &lt;br /&gt;
                    //HIViewSetActivated (myCombo,true);&lt;br /&gt;
&lt;br /&gt;
                     .....  (other code )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usefull Links ==  &lt;br /&gt;
&lt;br /&gt;
=== References ===&lt;br /&gt;
&lt;br /&gt;
[[http://developer.apple.com/documentation/Carbon/Conceptual/HandlingWindowsControls/hitb-wind_cont_tasks/chapter_3_section_9.html Introducing HIView]]&lt;br /&gt;
&lt;br /&gt;
OverView : [[http://developer.apple.com/carbon/HIToolbox_feature.html HIToolbox]] &lt;br /&gt;
&lt;br /&gt;
HIVIew  : [[http://developer.apple.com/documentation/Carbon/Reference/HIViewReference/Reference/reference.html reference]] [[http://developer.apple.com/documentation/Carbon/Reference/HIViewReference/HIViewReference.pdf or .pdf format]]&lt;br /&gt;
&lt;br /&gt;
[[http://developer.apple.com/documentation/Carbon/Conceptual/Upgrading_HIToolbox/index.html Upgrading to HIToolbox]]&lt;br /&gt;
&lt;br /&gt;
===Code sample ===&lt;br /&gt;
&lt;br /&gt;
Build a big toy with all controls included : [http://developer.apple.com/samplecode/AppearanceSampleUpdated/listing575.html All controls + code around]&lt;br /&gt;
&lt;br /&gt;
High Level Toolbox, HIServices Release Notes : [http://developer.apple.com/releasenotes/Carbon/RN-HIToolbox/ HIToolbox]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Porting]]&lt;br /&gt;
[[Category:MacOSX]]&lt;br /&gt;
[[Category:Aqua]]&lt;/div&gt;</summary>
		<author><name>Plipli</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Mac_OS_X_Implementing_HIView&amp;diff=30752</id>
		<title>Mac OS X Implementing HIView</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Mac_OS_X_Implementing_HIView&amp;diff=30752"/>
		<updated>2007-04-25T12:55:21Z</updated>

		<summary type="html">&lt;p&gt;Plipli: /* Reengineer Events handling (plipli) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Contributors ==&lt;br /&gt;
&lt;br /&gt;
Eric Bachard[[http://wiki.services.openoffice.org/wiki/User:Ericb ericb]]&lt;br /&gt;
&lt;br /&gt;
Sébastien Plisson [[http://wiki.services.openoffice.org/wiki/User:Plipli plipli]]&lt;br /&gt;
&lt;br /&gt;
== Introduction == &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[DRAFT]  : means,  not yet working, work in progress ... &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
HIObject is a common base class for all user interface objects and all menus, windows, controls, toolbars, and so on, are subclasses of HIObject.&lt;br /&gt;
&lt;br /&gt;
HIView is an object-oriented view system subclassed from HIObject. All controls are implemented as HIView objects (&amp;quot;views&amp;quot;). You can easily subclass HIView classes, making it easy to implement custom controls. Over time the HIView API will replace the current Control Manager. See [[http://developer.apple.com/documentation/Carbon/Conceptual/HandlingWindowsControls/hitb-wind_cont_tasks/chapter_3_section_9.html HIView intro]]&lt;br /&gt;
&lt;br /&gt;
The main idea behind HIView is to superpose plans, to create any view, using compositing possibilities of Quartz Graphical Engine. &lt;br /&gt;
&lt;br /&gt;
The final result is the superposition of all plans, following simple rules like :&lt;br /&gt;
&lt;br /&gt;
 - The last plan is always drawn on the previous one ;&lt;br /&gt;
 - Some plans can  be declared visible, or not, very easely.&lt;br /&gt;
&lt;br /&gt;
This page is part of [[http://wiki.services.openoffice.org/wiki/Mac_OS_X_Porting_-_Native_Controls Native Controls Implementation]] and the objective is to use HIView for HIComboboxes or other HI*  controls. &lt;br /&gt;
&lt;br /&gt;
Our objective is to bind vcl controls with HI* controls, from Carbon API. &lt;br /&gt;
&lt;br /&gt;
e.g.  :  implement HICombobox as one control only.&lt;br /&gt;
&lt;br /&gt;
The generic implementation, under tests (and not fully working), uses : &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;In progress :&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;&lt;br /&gt;
- plipli : &amp;#039;&amp;#039;&amp;#039;HIFramework&amp;#039;&amp;#039;&amp;#039; integration : compiled, to be cleaned up before testing delivery to mac@porting ;&lt;br /&gt;
- ericb/ismael : salnativewidget - create and bind &amp;#039;&amp;#039;&amp;#039;native controls&amp;#039;&amp;#039;&amp;#039; (HIViews) (ericb) and &amp;#039;&amp;#039;&amp;#039;HIWindow&amp;#039;&amp;#039;&amp;#039; (ismael);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note : we &amp;quot;or&amp;quot;- ed kWindowCompositingAttribute in nWindowAttributes, to see compositing effects. &lt;br /&gt;
[FIXME] : investigate, because use this attribute causes refresh issues&lt;br /&gt;
&lt;br /&gt;
== HIFramework integration and benefits ==&lt;br /&gt;
&lt;br /&gt;
* Origin : Issued from Apple samples&lt;br /&gt;
&lt;br /&gt;
* Pros : &lt;br /&gt;
- use recent API code, &lt;br /&gt;
- given with many helpers and set/getters to manage data and events&lt;br /&gt;
- easily adaptable to use new services coming with Leopard (MacOSX 0.5)&lt;br /&gt;
- up/down compatibility wit hdifferent MacOSX versions&lt;br /&gt;
- hiobject registering system : low couplage with the utility classes of HIFramework&lt;br /&gt;
&lt;br /&gt;
* Cons :&lt;br /&gt;
- ?? too nice to be true :-)&lt;br /&gt;
&lt;br /&gt;
* Step by step :&lt;br /&gt;
1 - When any HIObject is created in salframe/salnativewidget (AquaSalFrame / AquaSalGraphics) it will be &lt;br /&gt;
registered to HIFramework base classes&lt;br /&gt;
2a - Being registered gives this instance of HIView/HIWindow access to helpers/setters/getters methods&lt;br /&gt;
2b - Event handling is highly centralized/factored : create, initialize, draw...&lt;br /&gt;
3 - Allmost all possible data / events is covered by HIFramework and will be easily used, as new controls are implemented in salnativewidget&lt;br /&gt;
&lt;br /&gt;
* Conclusion :&lt;br /&gt;
- Let&amp;#039;s clean it, test it and enjoy fastest implementation of Aqua native controls !! (GsoC fun ;-)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== VCL / AQUA traces deductions (ericb) ==&lt;br /&gt;
1)&lt;br /&gt;
&lt;br /&gt;
== Technical principles ==&lt;br /&gt;
&lt;br /&gt;
1) OO ask to VCL / native implementation code to draw controls (ie DrawNativeControl) or images or text&lt;br /&gt;
&lt;br /&gt;
2) For controls, native implementation code create objects but do not draw them&lt;br /&gt;
For images and text, native code draw objects to context (from QDBegin) or context from HiView event&lt;br /&gt;
&lt;br /&gt;
3) When HIView events are received by event handler, especially kEventControlDraw, native code should draw controls to context given by the event&lt;br /&gt;
&lt;br /&gt;
4) Native code call needsDisplay functions to tell Quartz which zone to update&lt;br /&gt;
&lt;br /&gt;
== Current code implementation==&lt;br /&gt;
&lt;br /&gt;
===Events for HIView ===&lt;br /&gt;
&lt;br /&gt;
Two sorts of events are needed: &lt;br /&gt;
&lt;br /&gt;
*for objects (ClasskEventClassHIObject )  :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;kEventHIObjectConstruct&lt;br /&gt;
&lt;br /&gt;
kEventHIObjectInitialize&lt;br /&gt;
&lt;br /&gt;
kEventHIObjectDestruct&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*for controls themselves ( Class kEventClassControl ) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;kEventControlDraw &lt;br /&gt;
&lt;br /&gt;
kEventControlInitialize&lt;br /&gt;
&lt;br /&gt;
kEventControlHitTest&lt;br /&gt;
&lt;br /&gt;
kEventControlGetPartRegion&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Current implementation : see vcl/aqua/aquavclevents.hxx for more informations about the syntax.&lt;br /&gt;
&lt;br /&gt;
===Install Event Handler ===&lt;br /&gt;
&lt;br /&gt;
Now we have to install event Handler, inside AquaSalFrame::CreateNewSystemWindow() :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
InstallEventHandler (&lt;br /&gt;
                           GetControlEventTarget (mhView),&lt;br /&gt;
                           NewEventHandlerUPP (HandleHIViewEvent),&lt;br /&gt;
                           GetEventTypeCount (cHIViewEvent),&lt;br /&gt;
                           cHIViewEvent,&lt;br /&gt;
                           (void*)mhView, // note the use of the pointer &lt;br /&gt;
                           NULL&lt;br /&gt;
                           );&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== The HI* Event Handler ===&lt;br /&gt;
&lt;br /&gt;
The Handler is OSStatus type, and is used when events are detected.&lt;br /&gt;
&lt;br /&gt;
e.g.  : we created HandleHIViewEvent() &lt;br /&gt;
&lt;br /&gt;
using GetEventParameter, itself using the parameters described in Apple documentation. &lt;br /&gt;
&lt;br /&gt;
Code sample :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
OSStatus HandleHIViewEvent(EventHandlerCallRef inHandlerCallRef, EventRef inEvent, void* inUserData)&lt;br /&gt;
{ &lt;br /&gt;
    //lock&lt;br /&gt;
    ImplSalYieldMutexAcquire();&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    OSStatus status = noErr;&lt;br /&gt;
    &lt;br /&gt;
    // we use mrContext, global and seen from everywhere &lt;br /&gt;
    CGContextRef mrContext; &lt;br /&gt;
    &lt;br /&gt;
    // create HIRect, contianing the control bounds ( in local coordinates) &lt;br /&gt;
    HIRect bounds;  &lt;br /&gt;
&lt;br /&gt;
    status = GetEventParameter (inEvent, &lt;br /&gt;
                                kEventParamCGContextRef, &lt;br /&gt;
                                typeCGContextRef, &lt;br /&gt;
                                NULL, &lt;br /&gt;
                                sizeof (CGContextRef), &lt;br /&gt;
                                NULL, &lt;br /&gt;
                                &amp;amp;mrContext); &lt;br /&gt;
&lt;br /&gt;
    // not used, but usefull&lt;br /&gt;
    //require_noerr(status, CantGetGraphicsContext); // 2&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
    // We need to know the bounds containing the current control &lt;br /&gt;
    HIViewGetBounds ((HIViewRef) inUserData, &amp;amp;bounds); &lt;br /&gt;
&lt;br /&gt;
    // not used, but usefull&lt;br /&gt;
    //require_noerr(status, CantGetBoundingRectangle);&lt;br /&gt;
&lt;br /&gt;
    // unlock &lt;br /&gt;
    ImplSalYieldMutexRelease();&lt;br /&gt;
    &lt;br /&gt;
    return status;  &lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===HIView use in AquaSalFrame::CreateNewSystemWindow()  ===&lt;br /&gt;
&lt;br /&gt;
Code sample : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    //  TEST HIVIew part &lt;br /&gt;
    // Set mrContentView with HIView Content ViewRef&lt;br /&gt;
  &lt;br /&gt;
        HIRect myViewRect;&lt;br /&gt;
        myViewRect.origin.x = aContentRect.left; &lt;br /&gt;
        myViewRect.origin.y = aContentRect.right; &lt;br /&gt;
        myViewRect.size.width = aContentRect.right-aContentRect.left; &lt;br /&gt;
        myViewRect.size.height = aContentRect.bottom-aContentRect.top; &lt;br /&gt;
        OSStatus errval;&lt;br /&gt;
        errval = HIViewFindByID(HIViewGetRoot(mrWindow), kHIViewWindowContentID, &amp;amp;mrContentView); &lt;br /&gt;
&lt;br /&gt;
        // make the view visible                        &lt;br /&gt;
        HIViewSetVisible (mrContentView, true); &lt;br /&gt;
        &lt;br /&gt;
        // set the frame&lt;br /&gt;
        HIViewSetFrame (mrContentView, &amp;amp;myViewRect);&lt;br /&gt;
&lt;br /&gt;
        // Activate content view and children&lt;br /&gt;
        HIViewSetActivated (mrContentView,true);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Controls ===&lt;br /&gt;
&lt;br /&gt;
[FIXME]&lt;br /&gt;
&lt;br /&gt;
Example : HICombobox&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; code located in vcl/aqua/source/gdi/salnativewidgets.cxx  , where all NWF are defined &lt;br /&gt;
&lt;br /&gt;
1) declare CTRL_COMBOBOX control as &amp;quot;true&amp;quot; in isNativeControlSupported() &lt;br /&gt;
&lt;br /&gt;
2) get the control region in getNativeControlRegion() &lt;br /&gt;
&lt;br /&gt;
3) add CTRL_COMBOBOX case in drawNativeControl()&lt;br /&gt;
&lt;br /&gt;
Code sample for the last part (Warning : not yet working !! ) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 switch( nType )&lt;br /&gt;
    {&lt;br /&gt;
            &lt;br /&gt;
        case CTRL_COMBOBOX:&lt;br /&gt;
        if ( ( nPart==PART_BUTTON_DOWN) ||  (nPart==PART_SUB_EDIT) || (nPart==PART_ENTIRE_CONTROL) || (nPart==HAS_BACKGROUND_TEXTURE))&lt;br /&gt;
&lt;br /&gt;
        .... (other code ) &lt;br /&gt;
&lt;br /&gt;
                    HIViewRef myCombo;&lt;br /&gt;
                                        &lt;br /&gt;
                    HIRect rc2;&lt;br /&gt;
                    &lt;br /&gt;
                    rc2.origin.x = rControlRegion.GetBoundRect().Left();&lt;br /&gt;
                    rc2.origin.y = rControlRegion.GetBoundRect().Top();&lt;br /&gt;
                    rc2.size.width = rControlRegion.GetBoundRect().GetWidth();&lt;br /&gt;
                    rc2.size.height = rControlRegion.GetBoundRect().GetHeight();&lt;br /&gt;
                    &lt;br /&gt;
                    HIComboBoxCreate ( &amp;amp;rc2 , NULL, NULL, NULL, kHIComboBoxStandardAttributes, &amp;amp;myCombo);&lt;br /&gt;
                    &lt;br /&gt;
                    HIViewSetVisible ( myCombo, true);&lt;br /&gt;
                    HIViewAddSubview (mrView, myCombo); &lt;br /&gt;
                    &lt;br /&gt;
                    HIViewSetNeedsDisplay (myCombo, true);                   &lt;br /&gt;
                    &lt;br /&gt;
                    printf (&amp;quot;rc2.origin.x %.0f  \n rc2.origin.y %.0f \n rc2.size.width %.0f \n rc2.size.height %.0f \n&amp;quot;, &lt;br /&gt;
                    rc2.origin.x, rc2.origin.y, rc2.size.width , rc2.size.height );&lt;br /&gt;
                                        &lt;br /&gt;
                    //HIViewSetActivated (myCombo,true);&lt;br /&gt;
&lt;br /&gt;
                     .....  (other code )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usefull Links ==  &lt;br /&gt;
&lt;br /&gt;
=== References ===&lt;br /&gt;
&lt;br /&gt;
[[http://developer.apple.com/documentation/Carbon/Conceptual/HandlingWindowsControls/hitb-wind_cont_tasks/chapter_3_section_9.html Introducing HIView]]&lt;br /&gt;
&lt;br /&gt;
OverView : [[http://developer.apple.com/carbon/HIToolbox_feature.html HIToolbox]] &lt;br /&gt;
&lt;br /&gt;
HIVIew  : [[http://developer.apple.com/documentation/Carbon/Reference/HIViewReference/Reference/reference.html reference]] [[http://developer.apple.com/documentation/Carbon/Reference/HIViewReference/HIViewReference.pdf or .pdf format]]&lt;br /&gt;
&lt;br /&gt;
[[http://developer.apple.com/documentation/Carbon/Conceptual/Upgrading_HIToolbox/index.html Upgrading to HIToolbox]]&lt;br /&gt;
&lt;br /&gt;
===Code sample ===&lt;br /&gt;
&lt;br /&gt;
Build a big toy with all controls included : [http://developer.apple.com/samplecode/AppearanceSampleUpdated/listing575.html All controls + code around]&lt;br /&gt;
&lt;br /&gt;
High Level Toolbox, HIServices Release Notes : [http://developer.apple.com/releasenotes/Carbon/RN-HIToolbox/ HIToolbox]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Porting]]&lt;br /&gt;
[[Category:MacOSX]]&lt;br /&gt;
[[Category:Aqua]]&lt;/div&gt;</summary>
		<author><name>Plipli</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Mac_OS_X_Implementing_HIView&amp;diff=30751</id>
		<title>Mac OS X Implementing HIView</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Mac_OS_X_Implementing_HIView&amp;diff=30751"/>
		<updated>2007-04-25T12:51:27Z</updated>

		<summary type="html">&lt;p&gt;Plipli: /* HIFramework */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Contributors ==&lt;br /&gt;
&lt;br /&gt;
Eric Bachard[[http://wiki.services.openoffice.org/wiki/User:Ericb ericb]]&lt;br /&gt;
&lt;br /&gt;
Sébastien Plisson [[http://wiki.services.openoffice.org/wiki/User:Plipli plipli]]&lt;br /&gt;
&lt;br /&gt;
== Introduction == &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[DRAFT]  : means,  not yet working, work in progress ... &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
HIObject is a common base class for all user interface objects and all menus, windows, controls, toolbars, and so on, are subclasses of HIObject.&lt;br /&gt;
&lt;br /&gt;
HIView is an object-oriented view system subclassed from HIObject. All controls are implemented as HIView objects (&amp;quot;views&amp;quot;). You can easily subclass HIView classes, making it easy to implement custom controls. Over time the HIView API will replace the current Control Manager. See [[http://developer.apple.com/documentation/Carbon/Conceptual/HandlingWindowsControls/hitb-wind_cont_tasks/chapter_3_section_9.html HIView intro]]&lt;br /&gt;
&lt;br /&gt;
The main idea behind HIView is to superpose plans, to create any view, using compositing possibilities of Quartz Graphical Engine. &lt;br /&gt;
&lt;br /&gt;
The final result is the superposition of all plans, following simple rules like :&lt;br /&gt;
&lt;br /&gt;
 - The last plan is always drawn on the previous one ;&lt;br /&gt;
 - Some plans can  be declared visible, or not, very easely.&lt;br /&gt;
&lt;br /&gt;
This page is part of [[http://wiki.services.openoffice.org/wiki/Mac_OS_X_Porting_-_Native_Controls Native Controls Implementation]] and the objective is to use HIView for HIComboboxes or other HI*  controls. &lt;br /&gt;
&lt;br /&gt;
Our objective is to bind vcl controls with HI* controls, from Carbon API. &lt;br /&gt;
&lt;br /&gt;
e.g.  :  implement HICombobox as one control only.&lt;br /&gt;
&lt;br /&gt;
The generic implementation, under tests (and not fully working), uses : &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;In progress :&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;&lt;br /&gt;
- plipli : &amp;#039;&amp;#039;&amp;#039;HIFramework&amp;#039;&amp;#039;&amp;#039; integration : compiled, to be cleaned up before testing delivery to mac@porting ;&lt;br /&gt;
- ericb/ismael : salnativewidget - create and bind &amp;#039;&amp;#039;&amp;#039;native controls&amp;#039;&amp;#039;&amp;#039; (HIViews) (ericb) and &amp;#039;&amp;#039;&amp;#039;HIWindow&amp;#039;&amp;#039;&amp;#039; (ismael);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note : we &amp;quot;or&amp;quot;- ed kWindowCompositingAttribute in nWindowAttributes, to see compositing effects. &lt;br /&gt;
[FIXME] : investigate, because use this attribute causes refresh issues&lt;br /&gt;
&lt;br /&gt;
== HIFramework integration and benefits ==&lt;br /&gt;
&lt;br /&gt;
* Origin : Issued from Apple samples&lt;br /&gt;
&lt;br /&gt;
* Pros : &lt;br /&gt;
- use recent API code, &lt;br /&gt;
- given with many helpers and set/getters to manage data and events&lt;br /&gt;
- easily adaptable to use new services coming with Leopard (MacOSX 0.5)&lt;br /&gt;
- up/down compatibility wit hdifferent MacOSX versions&lt;br /&gt;
- hiobject registering system : low couplage with the utility classes of HIFramework&lt;br /&gt;
&lt;br /&gt;
* Cons :&lt;br /&gt;
- ?? too nice to be true :-)&lt;br /&gt;
&lt;br /&gt;
* Step by step :&lt;br /&gt;
1 - When any HIObject is created in salframe/salnativewidget (AquaSalFrame / AquaSalGraphics) it will be &lt;br /&gt;
registered to HIFramework base classes&lt;br /&gt;
2a - Being registered gives this instance of HIView/HIWindow access to helpers/setters/getters methods&lt;br /&gt;
2b - Event handling is highly centralized/factored : create, initialize, draw...&lt;br /&gt;
3 - Allmost all possible data / events is covered by HIFramework and will be easily used, as new controls are implemented in salnativewidget&lt;br /&gt;
&lt;br /&gt;
* Conclusion :&lt;br /&gt;
- Let&amp;#039;s clean it, test it and enjoy fastest implementation of Aqua native controls !! (GsoC fun ;-)&lt;br /&gt;
&lt;br /&gt;
== Reengineer Events handling (plipli) ==&lt;br /&gt;
&lt;br /&gt;
Main files : salframe.cxx, salframe.h, aquavclevents.hxx&lt;br /&gt;
&lt;br /&gt;
Description :&lt;br /&gt;
&lt;br /&gt;
In OOo, the class SalFrame defines the object containing :&lt;br /&gt;
- a window&lt;br /&gt;
- other objects related to window management system&lt;br /&gt;
&lt;br /&gt;
AquaSalFrame is the native implementation of VCL Salframe.&lt;br /&gt;
&lt;br /&gt;
== VCL / AQUA traces deductions (ericb) ==&lt;br /&gt;
1)&lt;br /&gt;
&lt;br /&gt;
== Technical principles ==&lt;br /&gt;
&lt;br /&gt;
1) OO ask to VCL / native implementation code to draw controls (ie DrawNativeControl) or images or text&lt;br /&gt;
&lt;br /&gt;
2) For controls, native implementation code create objects but do not draw them&lt;br /&gt;
For images and text, native code draw objects to context (from QDBegin) or context from HiView event&lt;br /&gt;
&lt;br /&gt;
3) When HIView events are received by event handler, especially kEventControlDraw, native code should draw controls to context given by the event&lt;br /&gt;
&lt;br /&gt;
4) Native code call needsDisplay functions to tell Quartz which zone to update&lt;br /&gt;
&lt;br /&gt;
== Current code implementation==&lt;br /&gt;
&lt;br /&gt;
===Events for HIView ===&lt;br /&gt;
&lt;br /&gt;
Two sorts of events are needed: &lt;br /&gt;
&lt;br /&gt;
*for objects (ClasskEventClassHIObject )  :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;kEventHIObjectConstruct&lt;br /&gt;
&lt;br /&gt;
kEventHIObjectInitialize&lt;br /&gt;
&lt;br /&gt;
kEventHIObjectDestruct&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*for controls themselves ( Class kEventClassControl ) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;kEventControlDraw &lt;br /&gt;
&lt;br /&gt;
kEventControlInitialize&lt;br /&gt;
&lt;br /&gt;
kEventControlHitTest&lt;br /&gt;
&lt;br /&gt;
kEventControlGetPartRegion&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Current implementation : see vcl/aqua/aquavclevents.hxx for more informations about the syntax.&lt;br /&gt;
&lt;br /&gt;
===Install Event Handler ===&lt;br /&gt;
&lt;br /&gt;
Now we have to install event Handler, inside AquaSalFrame::CreateNewSystemWindow() :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
InstallEventHandler (&lt;br /&gt;
                           GetControlEventTarget (mhView),&lt;br /&gt;
                           NewEventHandlerUPP (HandleHIViewEvent),&lt;br /&gt;
                           GetEventTypeCount (cHIViewEvent),&lt;br /&gt;
                           cHIViewEvent,&lt;br /&gt;
                           (void*)mhView, // note the use of the pointer &lt;br /&gt;
                           NULL&lt;br /&gt;
                           );&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== The HI* Event Handler ===&lt;br /&gt;
&lt;br /&gt;
The Handler is OSStatus type, and is used when events are detected.&lt;br /&gt;
&lt;br /&gt;
e.g.  : we created HandleHIViewEvent() &lt;br /&gt;
&lt;br /&gt;
using GetEventParameter, itself using the parameters described in Apple documentation. &lt;br /&gt;
&lt;br /&gt;
Code sample :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
OSStatus HandleHIViewEvent(EventHandlerCallRef inHandlerCallRef, EventRef inEvent, void* inUserData)&lt;br /&gt;
{ &lt;br /&gt;
    //lock&lt;br /&gt;
    ImplSalYieldMutexAcquire();&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    OSStatus status = noErr;&lt;br /&gt;
    &lt;br /&gt;
    // we use mrContext, global and seen from everywhere &lt;br /&gt;
    CGContextRef mrContext; &lt;br /&gt;
    &lt;br /&gt;
    // create HIRect, contianing the control bounds ( in local coordinates) &lt;br /&gt;
    HIRect bounds;  &lt;br /&gt;
&lt;br /&gt;
    status = GetEventParameter (inEvent, &lt;br /&gt;
                                kEventParamCGContextRef, &lt;br /&gt;
                                typeCGContextRef, &lt;br /&gt;
                                NULL, &lt;br /&gt;
                                sizeof (CGContextRef), &lt;br /&gt;
                                NULL, &lt;br /&gt;
                                &amp;amp;mrContext); &lt;br /&gt;
&lt;br /&gt;
    // not used, but usefull&lt;br /&gt;
    //require_noerr(status, CantGetGraphicsContext); // 2&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
    // We need to know the bounds containing the current control &lt;br /&gt;
    HIViewGetBounds ((HIViewRef) inUserData, &amp;amp;bounds); &lt;br /&gt;
&lt;br /&gt;
    // not used, but usefull&lt;br /&gt;
    //require_noerr(status, CantGetBoundingRectangle);&lt;br /&gt;
&lt;br /&gt;
    // unlock &lt;br /&gt;
    ImplSalYieldMutexRelease();&lt;br /&gt;
    &lt;br /&gt;
    return status;  &lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===HIView use in AquaSalFrame::CreateNewSystemWindow()  ===&lt;br /&gt;
&lt;br /&gt;
Code sample : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    //  TEST HIVIew part &lt;br /&gt;
    // Set mrContentView with HIView Content ViewRef&lt;br /&gt;
  &lt;br /&gt;
        HIRect myViewRect;&lt;br /&gt;
        myViewRect.origin.x = aContentRect.left; &lt;br /&gt;
        myViewRect.origin.y = aContentRect.right; &lt;br /&gt;
        myViewRect.size.width = aContentRect.right-aContentRect.left; &lt;br /&gt;
        myViewRect.size.height = aContentRect.bottom-aContentRect.top; &lt;br /&gt;
        OSStatus errval;&lt;br /&gt;
        errval = HIViewFindByID(HIViewGetRoot(mrWindow), kHIViewWindowContentID, &amp;amp;mrContentView); &lt;br /&gt;
&lt;br /&gt;
        // make the view visible                        &lt;br /&gt;
        HIViewSetVisible (mrContentView, true); &lt;br /&gt;
        &lt;br /&gt;
        // set the frame&lt;br /&gt;
        HIViewSetFrame (mrContentView, &amp;amp;myViewRect);&lt;br /&gt;
&lt;br /&gt;
        // Activate content view and children&lt;br /&gt;
        HIViewSetActivated (mrContentView,true);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Controls ===&lt;br /&gt;
&lt;br /&gt;
[FIXME]&lt;br /&gt;
&lt;br /&gt;
Example : HICombobox&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; code located in vcl/aqua/source/gdi/salnativewidgets.cxx  , where all NWF are defined &lt;br /&gt;
&lt;br /&gt;
1) declare CTRL_COMBOBOX control as &amp;quot;true&amp;quot; in isNativeControlSupported() &lt;br /&gt;
&lt;br /&gt;
2) get the control region in getNativeControlRegion() &lt;br /&gt;
&lt;br /&gt;
3) add CTRL_COMBOBOX case in drawNativeControl()&lt;br /&gt;
&lt;br /&gt;
Code sample for the last part (Warning : not yet working !! ) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 switch( nType )&lt;br /&gt;
    {&lt;br /&gt;
            &lt;br /&gt;
        case CTRL_COMBOBOX:&lt;br /&gt;
        if ( ( nPart==PART_BUTTON_DOWN) ||  (nPart==PART_SUB_EDIT) || (nPart==PART_ENTIRE_CONTROL) || (nPart==HAS_BACKGROUND_TEXTURE))&lt;br /&gt;
&lt;br /&gt;
        .... (other code ) &lt;br /&gt;
&lt;br /&gt;
                    HIViewRef myCombo;&lt;br /&gt;
                                        &lt;br /&gt;
                    HIRect rc2;&lt;br /&gt;
                    &lt;br /&gt;
                    rc2.origin.x = rControlRegion.GetBoundRect().Left();&lt;br /&gt;
                    rc2.origin.y = rControlRegion.GetBoundRect().Top();&lt;br /&gt;
                    rc2.size.width = rControlRegion.GetBoundRect().GetWidth();&lt;br /&gt;
                    rc2.size.height = rControlRegion.GetBoundRect().GetHeight();&lt;br /&gt;
                    &lt;br /&gt;
                    HIComboBoxCreate ( &amp;amp;rc2 , NULL, NULL, NULL, kHIComboBoxStandardAttributes, &amp;amp;myCombo);&lt;br /&gt;
                    &lt;br /&gt;
                    HIViewSetVisible ( myCombo, true);&lt;br /&gt;
                    HIViewAddSubview (mrView, myCombo); &lt;br /&gt;
                    &lt;br /&gt;
                    HIViewSetNeedsDisplay (myCombo, true);                   &lt;br /&gt;
                    &lt;br /&gt;
                    printf (&amp;quot;rc2.origin.x %.0f  \n rc2.origin.y %.0f \n rc2.size.width %.0f \n rc2.size.height %.0f \n&amp;quot;, &lt;br /&gt;
                    rc2.origin.x, rc2.origin.y, rc2.size.width , rc2.size.height );&lt;br /&gt;
                                        &lt;br /&gt;
                    //HIViewSetActivated (myCombo,true);&lt;br /&gt;
&lt;br /&gt;
                     .....  (other code )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usefull Links ==  &lt;br /&gt;
&lt;br /&gt;
=== References ===&lt;br /&gt;
&lt;br /&gt;
[[http://developer.apple.com/documentation/Carbon/Conceptual/HandlingWindowsControls/hitb-wind_cont_tasks/chapter_3_section_9.html Introducing HIView]]&lt;br /&gt;
&lt;br /&gt;
OverView : [[http://developer.apple.com/carbon/HIToolbox_feature.html HIToolbox]] &lt;br /&gt;
&lt;br /&gt;
HIVIew  : [[http://developer.apple.com/documentation/Carbon/Reference/HIViewReference/Reference/reference.html reference]] [[http://developer.apple.com/documentation/Carbon/Reference/HIViewReference/HIViewReference.pdf or .pdf format]]&lt;br /&gt;
&lt;br /&gt;
[[http://developer.apple.com/documentation/Carbon/Conceptual/Upgrading_HIToolbox/index.html Upgrading to HIToolbox]]&lt;br /&gt;
&lt;br /&gt;
===Code sample ===&lt;br /&gt;
&lt;br /&gt;
Build a big toy with all controls included : [http://developer.apple.com/samplecode/AppearanceSampleUpdated/listing575.html All controls + code around]&lt;br /&gt;
&lt;br /&gt;
High Level Toolbox, HIServices Release Notes : [http://developer.apple.com/releasenotes/Carbon/RN-HIToolbox/ HIToolbox]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Porting]]&lt;br /&gt;
[[Category:MacOSX]]&lt;br /&gt;
[[Category:Aqua]]&lt;/div&gt;</summary>
		<author><name>Plipli</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Mac_OS_X_Implementing_HIView&amp;diff=30750</id>
		<title>Mac OS X Implementing HIView</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Mac_OS_X_Implementing_HIView&amp;diff=30750"/>
		<updated>2007-04-25T12:43:00Z</updated>

		<summary type="html">&lt;p&gt;Plipli: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Contributors ==&lt;br /&gt;
&lt;br /&gt;
Eric Bachard[[http://wiki.services.openoffice.org/wiki/User:Ericb ericb]]&lt;br /&gt;
&lt;br /&gt;
Sébastien Plisson [[http://wiki.services.openoffice.org/wiki/User:Plipli plipli]]&lt;br /&gt;
&lt;br /&gt;
== Introduction == &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[DRAFT]  : means,  not yet working, work in progress ... &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
HIObject is a common base class for all user interface objects and all menus, windows, controls, toolbars, and so on, are subclasses of HIObject.&lt;br /&gt;
&lt;br /&gt;
HIView is an object-oriented view system subclassed from HIObject. All controls are implemented as HIView objects (&amp;quot;views&amp;quot;). You can easily subclass HIView classes, making it easy to implement custom controls. Over time the HIView API will replace the current Control Manager. See [[http://developer.apple.com/documentation/Carbon/Conceptual/HandlingWindowsControls/hitb-wind_cont_tasks/chapter_3_section_9.html HIView intro]]&lt;br /&gt;
&lt;br /&gt;
The main idea behind HIView is to superpose plans, to create any view, using compositing possibilities of Quartz Graphical Engine. &lt;br /&gt;
&lt;br /&gt;
The final result is the superposition of all plans, following simple rules like :&lt;br /&gt;
&lt;br /&gt;
 - The last plan is always drawn on the previous one ;&lt;br /&gt;
 - Some plans can  be declared visible, or not, very easely.&lt;br /&gt;
&lt;br /&gt;
This page is part of [[http://wiki.services.openoffice.org/wiki/Mac_OS_X_Porting_-_Native_Controls Native Controls Implementation]] and the objective is to use HIView for HIComboboxes or other HI*  controls. &lt;br /&gt;
&lt;br /&gt;
Our objective is to bind vcl controls with HI* controls, from Carbon API. &lt;br /&gt;
&lt;br /&gt;
e.g.  :  implement HICombobox as one control only.&lt;br /&gt;
&lt;br /&gt;
The generic implementation, under tests (and not fully working), uses : &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;In progress :&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt;&lt;br /&gt;
- plipli : &amp;#039;&amp;#039;&amp;#039;HIFramework&amp;#039;&amp;#039;&amp;#039; integration : compiled, to be cleaned up before testing delivery to mac@porting ;&lt;br /&gt;
- ericb/ismael : salnativewidget - create and bind &amp;#039;&amp;#039;&amp;#039;native controls&amp;#039;&amp;#039;&amp;#039; (HIViews) (ericb) and &amp;#039;&amp;#039;&amp;#039;HIWindow&amp;#039;&amp;#039;&amp;#039; (ismael);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note : we &amp;quot;or&amp;quot;- ed kWindowCompositingAttribute in nWindowAttributes, to see compositing effects. &lt;br /&gt;
[FIXME] : investigate, because use this attribute causes refresh issues&lt;br /&gt;
&lt;br /&gt;
== HIFramework ==&lt;br /&gt;
&lt;br /&gt;
== Reengineer Events handling (plipli) ==&lt;br /&gt;
&lt;br /&gt;
Main files : salframe.cxx, salframe.h, aquavclevents.hxx&lt;br /&gt;
&lt;br /&gt;
Description :&lt;br /&gt;
&lt;br /&gt;
In OOo, the class SalFrame defines the object containing :&lt;br /&gt;
- a window&lt;br /&gt;
- other objects related to window management system&lt;br /&gt;
&lt;br /&gt;
AquaSalFrame is the native implementation of VCL Salframe.&lt;br /&gt;
&lt;br /&gt;
== VCL / AQUA traces deductions (ericb) ==&lt;br /&gt;
1)&lt;br /&gt;
&lt;br /&gt;
== Technical principles ==&lt;br /&gt;
&lt;br /&gt;
1) OO ask to VCL / native implementation code to draw controls (ie DrawNativeControl) or images or text&lt;br /&gt;
&lt;br /&gt;
2) For controls, native implementation code create objects but do not draw them&lt;br /&gt;
For images and text, native code draw objects to context (from QDBegin) or context from HiView event&lt;br /&gt;
&lt;br /&gt;
3) When HIView events are received by event handler, especially kEventControlDraw, native code should draw controls to context given by the event&lt;br /&gt;
&lt;br /&gt;
4) Native code call needsDisplay functions to tell Quartz which zone to update&lt;br /&gt;
&lt;br /&gt;
== Current code implementation==&lt;br /&gt;
&lt;br /&gt;
===Events for HIView ===&lt;br /&gt;
&lt;br /&gt;
Two sorts of events are needed: &lt;br /&gt;
&lt;br /&gt;
*for objects (ClasskEventClassHIObject )  :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;kEventHIObjectConstruct&lt;br /&gt;
&lt;br /&gt;
kEventHIObjectInitialize&lt;br /&gt;
&lt;br /&gt;
kEventHIObjectDestruct&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*for controls themselves ( Class kEventClassControl ) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;kEventControlDraw &lt;br /&gt;
&lt;br /&gt;
kEventControlInitialize&lt;br /&gt;
&lt;br /&gt;
kEventControlHitTest&lt;br /&gt;
&lt;br /&gt;
kEventControlGetPartRegion&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Current implementation : see vcl/aqua/aquavclevents.hxx for more informations about the syntax.&lt;br /&gt;
&lt;br /&gt;
===Install Event Handler ===&lt;br /&gt;
&lt;br /&gt;
Now we have to install event Handler, inside AquaSalFrame::CreateNewSystemWindow() :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
InstallEventHandler (&lt;br /&gt;
                           GetControlEventTarget (mhView),&lt;br /&gt;
                           NewEventHandlerUPP (HandleHIViewEvent),&lt;br /&gt;
                           GetEventTypeCount (cHIViewEvent),&lt;br /&gt;
                           cHIViewEvent,&lt;br /&gt;
                           (void*)mhView, // note the use of the pointer &lt;br /&gt;
                           NULL&lt;br /&gt;
                           );&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== The HI* Event Handler ===&lt;br /&gt;
&lt;br /&gt;
The Handler is OSStatus type, and is used when events are detected.&lt;br /&gt;
&lt;br /&gt;
e.g.  : we created HandleHIViewEvent() &lt;br /&gt;
&lt;br /&gt;
using GetEventParameter, itself using the parameters described in Apple documentation. &lt;br /&gt;
&lt;br /&gt;
Code sample :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
OSStatus HandleHIViewEvent(EventHandlerCallRef inHandlerCallRef, EventRef inEvent, void* inUserData)&lt;br /&gt;
{ &lt;br /&gt;
    //lock&lt;br /&gt;
    ImplSalYieldMutexAcquire();&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    OSStatus status = noErr;&lt;br /&gt;
    &lt;br /&gt;
    // we use mrContext, global and seen from everywhere &lt;br /&gt;
    CGContextRef mrContext; &lt;br /&gt;
    &lt;br /&gt;
    // create HIRect, contianing the control bounds ( in local coordinates) &lt;br /&gt;
    HIRect bounds;  &lt;br /&gt;
&lt;br /&gt;
    status = GetEventParameter (inEvent, &lt;br /&gt;
                                kEventParamCGContextRef, &lt;br /&gt;
                                typeCGContextRef, &lt;br /&gt;
                                NULL, &lt;br /&gt;
                                sizeof (CGContextRef), &lt;br /&gt;
                                NULL, &lt;br /&gt;
                                &amp;amp;mrContext); &lt;br /&gt;
&lt;br /&gt;
    // not used, but usefull&lt;br /&gt;
    //require_noerr(status, CantGetGraphicsContext); // 2&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
    // We need to know the bounds containing the current control &lt;br /&gt;
    HIViewGetBounds ((HIViewRef) inUserData, &amp;amp;bounds); &lt;br /&gt;
&lt;br /&gt;
    // not used, but usefull&lt;br /&gt;
    //require_noerr(status, CantGetBoundingRectangle);&lt;br /&gt;
&lt;br /&gt;
    // unlock &lt;br /&gt;
    ImplSalYieldMutexRelease();&lt;br /&gt;
    &lt;br /&gt;
    return status;  &lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===HIView use in AquaSalFrame::CreateNewSystemWindow()  ===&lt;br /&gt;
&lt;br /&gt;
Code sample : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    //  TEST HIVIew part &lt;br /&gt;
    // Set mrContentView with HIView Content ViewRef&lt;br /&gt;
  &lt;br /&gt;
        HIRect myViewRect;&lt;br /&gt;
        myViewRect.origin.x = aContentRect.left; &lt;br /&gt;
        myViewRect.origin.y = aContentRect.right; &lt;br /&gt;
        myViewRect.size.width = aContentRect.right-aContentRect.left; &lt;br /&gt;
        myViewRect.size.height = aContentRect.bottom-aContentRect.top; &lt;br /&gt;
        OSStatus errval;&lt;br /&gt;
        errval = HIViewFindByID(HIViewGetRoot(mrWindow), kHIViewWindowContentID, &amp;amp;mrContentView); &lt;br /&gt;
&lt;br /&gt;
        // make the view visible                        &lt;br /&gt;
        HIViewSetVisible (mrContentView, true); &lt;br /&gt;
        &lt;br /&gt;
        // set the frame&lt;br /&gt;
        HIViewSetFrame (mrContentView, &amp;amp;myViewRect);&lt;br /&gt;
&lt;br /&gt;
        // Activate content view and children&lt;br /&gt;
        HIViewSetActivated (mrContentView,true);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Controls ===&lt;br /&gt;
&lt;br /&gt;
[FIXME]&lt;br /&gt;
&lt;br /&gt;
Example : HICombobox&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; code located in vcl/aqua/source/gdi/salnativewidgets.cxx  , where all NWF are defined &lt;br /&gt;
&lt;br /&gt;
1) declare CTRL_COMBOBOX control as &amp;quot;true&amp;quot; in isNativeControlSupported() &lt;br /&gt;
&lt;br /&gt;
2) get the control region in getNativeControlRegion() &lt;br /&gt;
&lt;br /&gt;
3) add CTRL_COMBOBOX case in drawNativeControl()&lt;br /&gt;
&lt;br /&gt;
Code sample for the last part (Warning : not yet working !! ) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 switch( nType )&lt;br /&gt;
    {&lt;br /&gt;
            &lt;br /&gt;
        case CTRL_COMBOBOX:&lt;br /&gt;
        if ( ( nPart==PART_BUTTON_DOWN) ||  (nPart==PART_SUB_EDIT) || (nPart==PART_ENTIRE_CONTROL) || (nPart==HAS_BACKGROUND_TEXTURE))&lt;br /&gt;
&lt;br /&gt;
        .... (other code ) &lt;br /&gt;
&lt;br /&gt;
                    HIViewRef myCombo;&lt;br /&gt;
                                        &lt;br /&gt;
                    HIRect rc2;&lt;br /&gt;
                    &lt;br /&gt;
                    rc2.origin.x = rControlRegion.GetBoundRect().Left();&lt;br /&gt;
                    rc2.origin.y = rControlRegion.GetBoundRect().Top();&lt;br /&gt;
                    rc2.size.width = rControlRegion.GetBoundRect().GetWidth();&lt;br /&gt;
                    rc2.size.height = rControlRegion.GetBoundRect().GetHeight();&lt;br /&gt;
                    &lt;br /&gt;
                    HIComboBoxCreate ( &amp;amp;rc2 , NULL, NULL, NULL, kHIComboBoxStandardAttributes, &amp;amp;myCombo);&lt;br /&gt;
                    &lt;br /&gt;
                    HIViewSetVisible ( myCombo, true);&lt;br /&gt;
                    HIViewAddSubview (mrView, myCombo); &lt;br /&gt;
                    &lt;br /&gt;
                    HIViewSetNeedsDisplay (myCombo, true);                   &lt;br /&gt;
                    &lt;br /&gt;
                    printf (&amp;quot;rc2.origin.x %.0f  \n rc2.origin.y %.0f \n rc2.size.width %.0f \n rc2.size.height %.0f \n&amp;quot;, &lt;br /&gt;
                    rc2.origin.x, rc2.origin.y, rc2.size.width , rc2.size.height );&lt;br /&gt;
                                        &lt;br /&gt;
                    //HIViewSetActivated (myCombo,true);&lt;br /&gt;
&lt;br /&gt;
                     .....  (other code )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usefull Links ==  &lt;br /&gt;
&lt;br /&gt;
=== References ===&lt;br /&gt;
&lt;br /&gt;
[[http://developer.apple.com/documentation/Carbon/Conceptual/HandlingWindowsControls/hitb-wind_cont_tasks/chapter_3_section_9.html Introducing HIView]]&lt;br /&gt;
&lt;br /&gt;
OverView : [[http://developer.apple.com/carbon/HIToolbox_feature.html HIToolbox]] &lt;br /&gt;
&lt;br /&gt;
HIVIew  : [[http://developer.apple.com/documentation/Carbon/Reference/HIViewReference/Reference/reference.html reference]] [[http://developer.apple.com/documentation/Carbon/Reference/HIViewReference/HIViewReference.pdf or .pdf format]]&lt;br /&gt;
&lt;br /&gt;
[[http://developer.apple.com/documentation/Carbon/Conceptual/Upgrading_HIToolbox/index.html Upgrading to HIToolbox]]&lt;br /&gt;
&lt;br /&gt;
===Code sample ===&lt;br /&gt;
&lt;br /&gt;
Build a big toy with all controls included : [http://developer.apple.com/samplecode/AppearanceSampleUpdated/listing575.html All controls + code around]&lt;br /&gt;
&lt;br /&gt;
High Level Toolbox, HIServices Release Notes : [http://developer.apple.com/releasenotes/Carbon/RN-HIToolbox/ HIToolbox]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Porting]]&lt;br /&gt;
[[Category:MacOSX]]&lt;br /&gt;
[[Category:Aqua]]&lt;/div&gt;</summary>
		<author><name>Plipli</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Mac_OS_X_Implementing_HIView&amp;diff=30749</id>
		<title>Mac OS X Implementing HIView</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Mac_OS_X_Implementing_HIView&amp;diff=30749"/>
		<updated>2007-04-25T12:42:13Z</updated>

		<summary type="html">&lt;p&gt;Plipli: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Contributors ==&lt;br /&gt;
&lt;br /&gt;
Eric Bachard[[http://wiki.services.openoffice.org/wiki/User:Ericb ericb]]&lt;br /&gt;
&lt;br /&gt;
Sébastien Plisson [[http://wiki.services.openoffice.org/wiki/User:Plipli plipli]]&lt;br /&gt;
&lt;br /&gt;
== Introduction == &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[DRAFT]  : means,  not yet working, work in progress ... &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
HIObject is a common base class for all user interface objects and all menus, windows, controls, toolbars, and so on, are subclasses of HIObject.&lt;br /&gt;
&lt;br /&gt;
HIView is an object-oriented view system subclassed from HIObject. All controls are implemented as HIView objects (&amp;quot;views&amp;quot;). You can easily subclass HIView classes, making it easy to implement custom controls. Over time the HIView API will replace the current Control Manager. See [[http://developer.apple.com/documentation/Carbon/Conceptual/HandlingWindowsControls/hitb-wind_cont_tasks/chapter_3_section_9.html HIView intro]]&lt;br /&gt;
&lt;br /&gt;
The main idea behind HIView is to superpose plans, to create any view, using compositing possibilities of Quartz Graphical Engine. &lt;br /&gt;
&lt;br /&gt;
The final result is the superposition of all plans, following simple rules like :&lt;br /&gt;
&lt;br /&gt;
 - The last plan is always drawn on the previous one ;&lt;br /&gt;
 - Some plans can  be declared visible, or not, very easely.&lt;br /&gt;
&lt;br /&gt;
This page is part of [[http://wiki.services.openoffice.org/wiki/Mac_OS_X_Porting_-_Native_Controls Native Controls Implementation]] and the objective is to use HIView for HIComboboxes or other HI*  controls. &lt;br /&gt;
&lt;br /&gt;
Our objective is to bind vcl controls with HI* controls, from Carbon API. &lt;br /&gt;
&lt;br /&gt;
e.g.  :  implement HICombobox as one control only.&lt;br /&gt;
&lt;br /&gt;
The generic implementation, under tests (and not fully working), uses : &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== In progress :&amp;lt;br&amp;gt;&lt;br /&gt;
- plipli : HIFramework integration : compiled, to be cleaned up before testing delivery to mac@porting ;&lt;br /&gt;
- ericb/ismael : salnativewidget - create and bind native controls (ericb) and HIWindow (ismael); ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note : we &amp;quot;or&amp;quot;- ed kWindowCompositingAttribute in nWindowAttributes, to see compositing effects. &lt;br /&gt;
[FIXME] : investigate, because use this attribute causes refresh issues&lt;br /&gt;
&lt;br /&gt;
== HIFramework ==&lt;br /&gt;
&lt;br /&gt;
== Reengineer Events handling (plipli) ==&lt;br /&gt;
&lt;br /&gt;
Main files : salframe.cxx, salframe.h, aquavclevents.hxx&lt;br /&gt;
&lt;br /&gt;
Description :&lt;br /&gt;
&lt;br /&gt;
In OOo, the class SalFrame defines the object containing :&lt;br /&gt;
- a window&lt;br /&gt;
- other objects related to window management system&lt;br /&gt;
&lt;br /&gt;
AquaSalFrame is the native implementation of VCL Salframe.&lt;br /&gt;
&lt;br /&gt;
== VCL / AQUA traces deductions (ericb) ==&lt;br /&gt;
1)&lt;br /&gt;
&lt;br /&gt;
== Technical principles ==&lt;br /&gt;
&lt;br /&gt;
1) OO ask to VCL / native implementation code to draw controls (ie DrawNativeControl) or images or text&lt;br /&gt;
&lt;br /&gt;
2) For controls, native implementation code create objects but do not draw them&lt;br /&gt;
For images and text, native code draw objects to context (from QDBegin) or context from HiView event&lt;br /&gt;
&lt;br /&gt;
3) When HIView events are received by event handler, especially kEventControlDraw, native code should draw controls to context given by the event&lt;br /&gt;
&lt;br /&gt;
4) Native code call needsDisplay functions to tell Quartz which zone to update&lt;br /&gt;
&lt;br /&gt;
== Current code implementation==&lt;br /&gt;
&lt;br /&gt;
===Events for HIView ===&lt;br /&gt;
&lt;br /&gt;
Two sorts of events are needed: &lt;br /&gt;
&lt;br /&gt;
*for objects (ClasskEventClassHIObject )  :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;kEventHIObjectConstruct&lt;br /&gt;
&lt;br /&gt;
kEventHIObjectInitialize&lt;br /&gt;
&lt;br /&gt;
kEventHIObjectDestruct&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*for controls themselves ( Class kEventClassControl ) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;kEventControlDraw &lt;br /&gt;
&lt;br /&gt;
kEventControlInitialize&lt;br /&gt;
&lt;br /&gt;
kEventControlHitTest&lt;br /&gt;
&lt;br /&gt;
kEventControlGetPartRegion&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Current implementation : see vcl/aqua/aquavclevents.hxx for more informations about the syntax.&lt;br /&gt;
&lt;br /&gt;
===Install Event Handler ===&lt;br /&gt;
&lt;br /&gt;
Now we have to install event Handler, inside AquaSalFrame::CreateNewSystemWindow() :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
InstallEventHandler (&lt;br /&gt;
                           GetControlEventTarget (mhView),&lt;br /&gt;
                           NewEventHandlerUPP (HandleHIViewEvent),&lt;br /&gt;
                           GetEventTypeCount (cHIViewEvent),&lt;br /&gt;
                           cHIViewEvent,&lt;br /&gt;
                           (void*)mhView, // note the use of the pointer &lt;br /&gt;
                           NULL&lt;br /&gt;
                           );&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== The HI* Event Handler ===&lt;br /&gt;
&lt;br /&gt;
The Handler is OSStatus type, and is used when events are detected.&lt;br /&gt;
&lt;br /&gt;
e.g.  : we created HandleHIViewEvent() &lt;br /&gt;
&lt;br /&gt;
using GetEventParameter, itself using the parameters described in Apple documentation. &lt;br /&gt;
&lt;br /&gt;
Code sample :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
OSStatus HandleHIViewEvent(EventHandlerCallRef inHandlerCallRef, EventRef inEvent, void* inUserData)&lt;br /&gt;
{ &lt;br /&gt;
    //lock&lt;br /&gt;
    ImplSalYieldMutexAcquire();&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    OSStatus status = noErr;&lt;br /&gt;
    &lt;br /&gt;
    // we use mrContext, global and seen from everywhere &lt;br /&gt;
    CGContextRef mrContext; &lt;br /&gt;
    &lt;br /&gt;
    // create HIRect, contianing the control bounds ( in local coordinates) &lt;br /&gt;
    HIRect bounds;  &lt;br /&gt;
&lt;br /&gt;
    status = GetEventParameter (inEvent, &lt;br /&gt;
                                kEventParamCGContextRef, &lt;br /&gt;
                                typeCGContextRef, &lt;br /&gt;
                                NULL, &lt;br /&gt;
                                sizeof (CGContextRef), &lt;br /&gt;
                                NULL, &lt;br /&gt;
                                &amp;amp;mrContext); &lt;br /&gt;
&lt;br /&gt;
    // not used, but usefull&lt;br /&gt;
    //require_noerr(status, CantGetGraphicsContext); // 2&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
    // We need to know the bounds containing the current control &lt;br /&gt;
    HIViewGetBounds ((HIViewRef) inUserData, &amp;amp;bounds); &lt;br /&gt;
&lt;br /&gt;
    // not used, but usefull&lt;br /&gt;
    //require_noerr(status, CantGetBoundingRectangle);&lt;br /&gt;
&lt;br /&gt;
    // unlock &lt;br /&gt;
    ImplSalYieldMutexRelease();&lt;br /&gt;
    &lt;br /&gt;
    return status;  &lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===HIView use in AquaSalFrame::CreateNewSystemWindow()  ===&lt;br /&gt;
&lt;br /&gt;
Code sample : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    //  TEST HIVIew part &lt;br /&gt;
    // Set mrContentView with HIView Content ViewRef&lt;br /&gt;
  &lt;br /&gt;
        HIRect myViewRect;&lt;br /&gt;
        myViewRect.origin.x = aContentRect.left; &lt;br /&gt;
        myViewRect.origin.y = aContentRect.right; &lt;br /&gt;
        myViewRect.size.width = aContentRect.right-aContentRect.left; &lt;br /&gt;
        myViewRect.size.height = aContentRect.bottom-aContentRect.top; &lt;br /&gt;
        OSStatus errval;&lt;br /&gt;
        errval = HIViewFindByID(HIViewGetRoot(mrWindow), kHIViewWindowContentID, &amp;amp;mrContentView); &lt;br /&gt;
&lt;br /&gt;
        // make the view visible                        &lt;br /&gt;
        HIViewSetVisible (mrContentView, true); &lt;br /&gt;
        &lt;br /&gt;
        // set the frame&lt;br /&gt;
        HIViewSetFrame (mrContentView, &amp;amp;myViewRect);&lt;br /&gt;
&lt;br /&gt;
        // Activate content view and children&lt;br /&gt;
        HIViewSetActivated (mrContentView,true);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Controls ===&lt;br /&gt;
&lt;br /&gt;
[FIXME]&lt;br /&gt;
&lt;br /&gt;
Example : HICombobox&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; code located in vcl/aqua/source/gdi/salnativewidgets.cxx  , where all NWF are defined &lt;br /&gt;
&lt;br /&gt;
1) declare CTRL_COMBOBOX control as &amp;quot;true&amp;quot; in isNativeControlSupported() &lt;br /&gt;
&lt;br /&gt;
2) get the control region in getNativeControlRegion() &lt;br /&gt;
&lt;br /&gt;
3) add CTRL_COMBOBOX case in drawNativeControl()&lt;br /&gt;
&lt;br /&gt;
Code sample for the last part (Warning : not yet working !! ) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 switch( nType )&lt;br /&gt;
    {&lt;br /&gt;
            &lt;br /&gt;
        case CTRL_COMBOBOX:&lt;br /&gt;
        if ( ( nPart==PART_BUTTON_DOWN) ||  (nPart==PART_SUB_EDIT) || (nPart==PART_ENTIRE_CONTROL) || (nPart==HAS_BACKGROUND_TEXTURE))&lt;br /&gt;
&lt;br /&gt;
        .... (other code ) &lt;br /&gt;
&lt;br /&gt;
                    HIViewRef myCombo;&lt;br /&gt;
                                        &lt;br /&gt;
                    HIRect rc2;&lt;br /&gt;
                    &lt;br /&gt;
                    rc2.origin.x = rControlRegion.GetBoundRect().Left();&lt;br /&gt;
                    rc2.origin.y = rControlRegion.GetBoundRect().Top();&lt;br /&gt;
                    rc2.size.width = rControlRegion.GetBoundRect().GetWidth();&lt;br /&gt;
                    rc2.size.height = rControlRegion.GetBoundRect().GetHeight();&lt;br /&gt;
                    &lt;br /&gt;
                    HIComboBoxCreate ( &amp;amp;rc2 , NULL, NULL, NULL, kHIComboBoxStandardAttributes, &amp;amp;myCombo);&lt;br /&gt;
                    &lt;br /&gt;
                    HIViewSetVisible ( myCombo, true);&lt;br /&gt;
                    HIViewAddSubview (mrView, myCombo); &lt;br /&gt;
                    &lt;br /&gt;
                    HIViewSetNeedsDisplay (myCombo, true);                   &lt;br /&gt;
                    &lt;br /&gt;
                    printf (&amp;quot;rc2.origin.x %.0f  \n rc2.origin.y %.0f \n rc2.size.width %.0f \n rc2.size.height %.0f \n&amp;quot;, &lt;br /&gt;
                    rc2.origin.x, rc2.origin.y, rc2.size.width , rc2.size.height );&lt;br /&gt;
                                        &lt;br /&gt;
                    //HIViewSetActivated (myCombo,true);&lt;br /&gt;
&lt;br /&gt;
                     .....  (other code )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usefull Links ==  &lt;br /&gt;
&lt;br /&gt;
=== References ===&lt;br /&gt;
&lt;br /&gt;
[[http://developer.apple.com/documentation/Carbon/Conceptual/HandlingWindowsControls/hitb-wind_cont_tasks/chapter_3_section_9.html Introducing HIView]]&lt;br /&gt;
&lt;br /&gt;
OverView : [[http://developer.apple.com/carbon/HIToolbox_feature.html HIToolbox]] &lt;br /&gt;
&lt;br /&gt;
HIVIew  : [[http://developer.apple.com/documentation/Carbon/Reference/HIViewReference/Reference/reference.html reference]] [[http://developer.apple.com/documentation/Carbon/Reference/HIViewReference/HIViewReference.pdf or .pdf format]]&lt;br /&gt;
&lt;br /&gt;
[[http://developer.apple.com/documentation/Carbon/Conceptual/Upgrading_HIToolbox/index.html Upgrading to HIToolbox]]&lt;br /&gt;
&lt;br /&gt;
===Code sample ===&lt;br /&gt;
&lt;br /&gt;
Build a big toy with all controls included : [http://developer.apple.com/samplecode/AppearanceSampleUpdated/listing575.html All controls + code around]&lt;br /&gt;
&lt;br /&gt;
High Level Toolbox, HIServices Release Notes : [http://developer.apple.com/releasenotes/Carbon/RN-HIToolbox/ HIToolbox]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Porting]]&lt;br /&gt;
[[Category:MacOSX]]&lt;br /&gt;
[[Category:Aqua]]&lt;/div&gt;</summary>
		<author><name>Plipli</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Mac_OS_X_Implementing_HIView&amp;diff=30748</id>
		<title>Mac OS X Implementing HIView</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Mac_OS_X_Implementing_HIView&amp;diff=30748"/>
		<updated>2007-04-25T12:40:12Z</updated>

		<summary type="html">&lt;p&gt;Plipli: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Contributors ==&lt;br /&gt;
&lt;br /&gt;
Eric Bachard[[http://wiki.services.openoffice.org/wiki/User:Ericb ericb]]&lt;br /&gt;
&lt;br /&gt;
Sébastien Plisson [[http://wiki.services.openoffice.org/wiki/User:Plipli plipli]]&lt;br /&gt;
&lt;br /&gt;
== Introduction == &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[DRAFT]  : means,  not yet working, work in progress ... &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
HIObject is a common base class for all user interface objects and all menus, windows, controls, toolbars, and so on, are subclasses of HIObject.&lt;br /&gt;
&lt;br /&gt;
HIView is an object-oriented view system subclassed from HIObject. All controls are implemented as HIView objects (&amp;quot;views&amp;quot;). You can easily subclass HIView classes, making it easy to implement custom controls. Over time the HIView API will replace the current Control Manager. See [[http://developer.apple.com/documentation/Carbon/Conceptual/HandlingWindowsControls/hitb-wind_cont_tasks/chapter_3_section_9.html HIView intro]]&lt;br /&gt;
&lt;br /&gt;
The main idea behind HIView is to superpose plans, to create any view, using compositing possibilities of Quartz Graphical Engine. &lt;br /&gt;
&lt;br /&gt;
The final result is the superposition of all plans, following simple rules like :&lt;br /&gt;
&lt;br /&gt;
 - The last plan is always drawn on the previous one ;&lt;br /&gt;
 - Some plans can  be declared visible, or not, very easely.&lt;br /&gt;
&lt;br /&gt;
This page is part of [[http://wiki.services.openoffice.org/wiki/Mac_OS_X_Porting_-_Native_Controls Native Controls Implementation]] and the objective is to use HIView for HIComboboxes or other HI*  controls. &lt;br /&gt;
&lt;br /&gt;
Our objective is to bind vcl controls with HI* controls, from Carbon API. &lt;br /&gt;
&lt;br /&gt;
e.g.  :  implement HICombobox as one control only.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The generic implementation, under tests (and not fully working), uses : &lt;br /&gt;
&lt;br /&gt;
In progress :&lt;br /&gt;
- plipli : HIFramework integration : compiled, to be cleaned up before testing delivery to mac@porting&lt;br /&gt;
- ericb/ismael : salnativewidget - create and bind native controls (ericb) and HIWindow (ismael)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note : we &amp;quot;or&amp;quot;- ed kWindowCompositingAttribute in nWindowAttributes, to see compositing effects. &lt;br /&gt;
[FIXME] : investigate, because use this attribute causes refresh issues&lt;br /&gt;
&lt;br /&gt;
== HIFramework ==&lt;br /&gt;
&lt;br /&gt;
== Reengineer Events handling (plipli) ==&lt;br /&gt;
&lt;br /&gt;
Main files : salframe.cxx, salframe.h, aquavclevents.hxx&lt;br /&gt;
&lt;br /&gt;
Description :&lt;br /&gt;
&lt;br /&gt;
In OOo, the class SalFrame defines the object containing :&lt;br /&gt;
- a window&lt;br /&gt;
- other objects related to window management system&lt;br /&gt;
&lt;br /&gt;
AquaSalFrame is the native implementation of VCL Salframe.&lt;br /&gt;
&lt;br /&gt;
== VCL / AQUA traces deductions (ericb) ==&lt;br /&gt;
1)&lt;br /&gt;
&lt;br /&gt;
== Technical principles ==&lt;br /&gt;
&lt;br /&gt;
1) OO ask to VCL / native implementation code to draw controls (ie DrawNativeControl) or images or text&lt;br /&gt;
&lt;br /&gt;
2) For controls, native implementation code create objects but do not draw them&lt;br /&gt;
For images and text, native code draw objects to context (from QDBegin) or context from HiView event&lt;br /&gt;
&lt;br /&gt;
3) When HIView events are received by event handler, especially kEventControlDraw, native code should draw controls to context given by the event&lt;br /&gt;
&lt;br /&gt;
4) Native code call needsDisplay functions to tell Quartz which zone to update&lt;br /&gt;
&lt;br /&gt;
== Current code implementation==&lt;br /&gt;
&lt;br /&gt;
===Events for HIView ===&lt;br /&gt;
&lt;br /&gt;
Two sorts of events are needed: &lt;br /&gt;
&lt;br /&gt;
*for objects (ClasskEventClassHIObject )  :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;kEventHIObjectConstruct&lt;br /&gt;
&lt;br /&gt;
kEventHIObjectInitialize&lt;br /&gt;
&lt;br /&gt;
kEventHIObjectDestruct&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*for controls themselves ( Class kEventClassControl ) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;kEventControlDraw &lt;br /&gt;
&lt;br /&gt;
kEventControlInitialize&lt;br /&gt;
&lt;br /&gt;
kEventControlHitTest&lt;br /&gt;
&lt;br /&gt;
kEventControlGetPartRegion&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Current implementation : see vcl/aqua/aquavclevents.hxx for more informations about the syntax.&lt;br /&gt;
&lt;br /&gt;
===Install Event Handler ===&lt;br /&gt;
&lt;br /&gt;
Now we have to install event Handler, inside AquaSalFrame::CreateNewSystemWindow() :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
InstallEventHandler (&lt;br /&gt;
                           GetControlEventTarget (mhView),&lt;br /&gt;
                           NewEventHandlerUPP (HandleHIViewEvent),&lt;br /&gt;
                           GetEventTypeCount (cHIViewEvent),&lt;br /&gt;
                           cHIViewEvent,&lt;br /&gt;
                           (void*)mhView, // note the use of the pointer &lt;br /&gt;
                           NULL&lt;br /&gt;
                           );&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== The HI* Event Handler ===&lt;br /&gt;
&lt;br /&gt;
The Handler is OSStatus type, and is used when events are detected.&lt;br /&gt;
&lt;br /&gt;
e.g.  : we created HandleHIViewEvent() &lt;br /&gt;
&lt;br /&gt;
using GetEventParameter, itself using the parameters described in Apple documentation. &lt;br /&gt;
&lt;br /&gt;
Code sample :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
OSStatus HandleHIViewEvent(EventHandlerCallRef inHandlerCallRef, EventRef inEvent, void* inUserData)&lt;br /&gt;
{ &lt;br /&gt;
    //lock&lt;br /&gt;
    ImplSalYieldMutexAcquire();&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    OSStatus status = noErr;&lt;br /&gt;
    &lt;br /&gt;
    // we use mrContext, global and seen from everywhere &lt;br /&gt;
    CGContextRef mrContext; &lt;br /&gt;
    &lt;br /&gt;
    // create HIRect, contianing the control bounds ( in local coordinates) &lt;br /&gt;
    HIRect bounds;  &lt;br /&gt;
&lt;br /&gt;
    status = GetEventParameter (inEvent, &lt;br /&gt;
                                kEventParamCGContextRef, &lt;br /&gt;
                                typeCGContextRef, &lt;br /&gt;
                                NULL, &lt;br /&gt;
                                sizeof (CGContextRef), &lt;br /&gt;
                                NULL, &lt;br /&gt;
                                &amp;amp;mrContext); &lt;br /&gt;
&lt;br /&gt;
    // not used, but usefull&lt;br /&gt;
    //require_noerr(status, CantGetGraphicsContext); // 2&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
    // We need to know the bounds containing the current control &lt;br /&gt;
    HIViewGetBounds ((HIViewRef) inUserData, &amp;amp;bounds); &lt;br /&gt;
&lt;br /&gt;
    // not used, but usefull&lt;br /&gt;
    //require_noerr(status, CantGetBoundingRectangle);&lt;br /&gt;
&lt;br /&gt;
    // unlock &lt;br /&gt;
    ImplSalYieldMutexRelease();&lt;br /&gt;
    &lt;br /&gt;
    return status;  &lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===HIView use in AquaSalFrame::CreateNewSystemWindow()  ===&lt;br /&gt;
&lt;br /&gt;
Code sample : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    //  TEST HIVIew part &lt;br /&gt;
    // Set mrContentView with HIView Content ViewRef&lt;br /&gt;
  &lt;br /&gt;
        HIRect myViewRect;&lt;br /&gt;
        myViewRect.origin.x = aContentRect.left; &lt;br /&gt;
        myViewRect.origin.y = aContentRect.right; &lt;br /&gt;
        myViewRect.size.width = aContentRect.right-aContentRect.left; &lt;br /&gt;
        myViewRect.size.height = aContentRect.bottom-aContentRect.top; &lt;br /&gt;
        OSStatus errval;&lt;br /&gt;
        errval = HIViewFindByID(HIViewGetRoot(mrWindow), kHIViewWindowContentID, &amp;amp;mrContentView); &lt;br /&gt;
&lt;br /&gt;
        // make the view visible                        &lt;br /&gt;
        HIViewSetVisible (mrContentView, true); &lt;br /&gt;
        &lt;br /&gt;
        // set the frame&lt;br /&gt;
        HIViewSetFrame (mrContentView, &amp;amp;myViewRect);&lt;br /&gt;
&lt;br /&gt;
        // Activate content view and children&lt;br /&gt;
        HIViewSetActivated (mrContentView,true);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Controls ===&lt;br /&gt;
&lt;br /&gt;
[FIXME]&lt;br /&gt;
&lt;br /&gt;
Example : HICombobox&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; code located in vcl/aqua/source/gdi/salnativewidgets.cxx  , where all NWF are defined &lt;br /&gt;
&lt;br /&gt;
1) declare CTRL_COMBOBOX control as &amp;quot;true&amp;quot; in isNativeControlSupported() &lt;br /&gt;
&lt;br /&gt;
2) get the control region in getNativeControlRegion() &lt;br /&gt;
&lt;br /&gt;
3) add CTRL_COMBOBOX case in drawNativeControl()&lt;br /&gt;
&lt;br /&gt;
Code sample for the last part (Warning : not yet working !! ) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 switch( nType )&lt;br /&gt;
    {&lt;br /&gt;
            &lt;br /&gt;
        case CTRL_COMBOBOX:&lt;br /&gt;
        if ( ( nPart==PART_BUTTON_DOWN) ||  (nPart==PART_SUB_EDIT) || (nPart==PART_ENTIRE_CONTROL) || (nPart==HAS_BACKGROUND_TEXTURE))&lt;br /&gt;
&lt;br /&gt;
        .... (other code ) &lt;br /&gt;
&lt;br /&gt;
                    HIViewRef myCombo;&lt;br /&gt;
                                        &lt;br /&gt;
                    HIRect rc2;&lt;br /&gt;
                    &lt;br /&gt;
                    rc2.origin.x = rControlRegion.GetBoundRect().Left();&lt;br /&gt;
                    rc2.origin.y = rControlRegion.GetBoundRect().Top();&lt;br /&gt;
                    rc2.size.width = rControlRegion.GetBoundRect().GetWidth();&lt;br /&gt;
                    rc2.size.height = rControlRegion.GetBoundRect().GetHeight();&lt;br /&gt;
                    &lt;br /&gt;
                    HIComboBoxCreate ( &amp;amp;rc2 , NULL, NULL, NULL, kHIComboBoxStandardAttributes, &amp;amp;myCombo);&lt;br /&gt;
                    &lt;br /&gt;
                    HIViewSetVisible ( myCombo, true);&lt;br /&gt;
                    HIViewAddSubview (mrView, myCombo); &lt;br /&gt;
                    &lt;br /&gt;
                    HIViewSetNeedsDisplay (myCombo, true);                   &lt;br /&gt;
                    &lt;br /&gt;
                    printf (&amp;quot;rc2.origin.x %.0f  \n rc2.origin.y %.0f \n rc2.size.width %.0f \n rc2.size.height %.0f \n&amp;quot;, &lt;br /&gt;
                    rc2.origin.x, rc2.origin.y, rc2.size.width , rc2.size.height );&lt;br /&gt;
                                        &lt;br /&gt;
                    //HIViewSetActivated (myCombo,true);&lt;br /&gt;
&lt;br /&gt;
                     .....  (other code )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usefull Links ==  &lt;br /&gt;
&lt;br /&gt;
=== References ===&lt;br /&gt;
&lt;br /&gt;
[[http://developer.apple.com/documentation/Carbon/Conceptual/HandlingWindowsControls/hitb-wind_cont_tasks/chapter_3_section_9.html Introducing HIView]]&lt;br /&gt;
&lt;br /&gt;
OverView : [[http://developer.apple.com/carbon/HIToolbox_feature.html HIToolbox]] &lt;br /&gt;
&lt;br /&gt;
HIVIew  : [[http://developer.apple.com/documentation/Carbon/Reference/HIViewReference/Reference/reference.html reference]] [[http://developer.apple.com/documentation/Carbon/Reference/HIViewReference/HIViewReference.pdf or .pdf format]]&lt;br /&gt;
&lt;br /&gt;
[[http://developer.apple.com/documentation/Carbon/Conceptual/Upgrading_HIToolbox/index.html Upgrading to HIToolbox]]&lt;br /&gt;
&lt;br /&gt;
===Code sample ===&lt;br /&gt;
&lt;br /&gt;
Build a big toy with all controls included : [http://developer.apple.com/samplecode/AppearanceSampleUpdated/listing575.html All controls + code around]&lt;br /&gt;
&lt;br /&gt;
High Level Toolbox, HIServices Release Notes : [http://developer.apple.com/releasenotes/Carbon/RN-HIToolbox/ HIToolbox]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Porting]]&lt;br /&gt;
[[Category:MacOSX]]&lt;br /&gt;
[[Category:Aqua]]&lt;/div&gt;</summary>
		<author><name>Plipli</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=User:Ericb&amp;diff=30593</id>
		<title>User:Ericb</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=User:Ericb&amp;diff=30593"/>
		<updated>2007-04-22T18:56:58Z</updated>

		<summary type="html">&lt;p&gt;Plipli: /* &amp;#039;&amp;#039;&amp;#039;Mac OS X porter Team at WWDC 2007&amp;#039;&amp;#039;&amp;#039; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Public Documentation License Notice==&lt;br /&gt;
&lt;br /&gt;
The contents of this Documentation (excepted Native Port Roadmap),are subject to the Public Documentation License Version 1.0 (the &amp;quot;License&amp;quot;); you may only use this Documentation if you comply with the terms of this License. A copy of the License is available at http://www.openoffice.org/licenses/PDL.html.&lt;br /&gt;
The Original Documentation is &amp;quot;Mac OS X native port&amp;quot;. The Initial Writer of the Original Documentation is (JCA) Eric Bachard (C) 2005-2006. All Rights Reserved. (Initial Writer contact(s): ericb@openoffice.org.)&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Mac OS X Native port&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;messagebox cleanup metadata&amp;quot; style=&amp;quot;border:1px solid blue;background-color:#B3FFF5;padding:7px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;The first Mac OS X native port objective is make OpenOffice.org run without X11 use, to make it a real Mac application.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;The second one is respect Aqua Human interface Guidelines&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; This is a long term work, and every help and/or contributions, like donations** are welcome.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 **see http://contributing.openoffice.org/index.html&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Native Port Roadmap&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;2006&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
* June 2006: work in progress &lt;br /&gt;
&lt;br /&gt;
- Basis: frame, instances, threads, drawing, painting, resizing (Stephan Schaefer, Tino Rachui)&lt;br /&gt;
&lt;br /&gt;
 Done: &lt;br /&gt;
 implement threads&lt;br /&gt;
 create, manage instance&lt;br /&gt;
 create, manage windows (including parents)&lt;br /&gt;
 create, manage events&lt;br /&gt;
 create manage drawing, resizing&lt;br /&gt;
 create, add menus (Pavel Janik)&lt;br /&gt;
 toggle window fullscreen (Pierre de Filippis)&lt;br /&gt;
 make font server work (Stephan Schaefer)&lt;br /&gt;
&lt;br /&gt;
* Current status font support (Stephan Schaefer, 2006/07/28): the following features are basically working now&lt;br /&gt;
** font selection&lt;br /&gt;
** font size&lt;br /&gt;
** simple font attributes (bold, italic)&lt;br /&gt;
&lt;br /&gt;
 Next step: document first part, and propose design&lt;br /&gt;
&lt;br /&gt;
- native filepicker (Pavel Janik, Florian Heckl)&lt;br /&gt;
&lt;br /&gt;
- native printing implementation (Oliver?)&lt;br /&gt;
&lt;br /&gt;
- native font implementation (Eric Bachard)&lt;br /&gt;
&lt;br /&gt;
* September 2006: &lt;br /&gt;
&lt;br /&gt;
- first proofs of concept: fonts, filepicker .. (more?)&lt;br /&gt;
- show the results (OOoCon 2006?)&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;2007&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
* January 2007: first alpha implementation&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Strategy for native port&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Possible Actions&amp;#039;&amp;#039;&amp;#039;: &lt;br /&gt;
&lt;br /&gt;
Identify us:&lt;br /&gt;
&lt;br /&gt;
#Complete the arrays below&lt;br /&gt;
#Update photos on frapr.com?&lt;br /&gt;
&lt;br /&gt;
Share the work:&lt;br /&gt;
&lt;br /&gt;
#Divide the work between little Teams&lt;br /&gt;
#Update Todo list regularly -&amp;gt; needs some love these days ... [http://wiki.services.openoffice.org/wiki/Mac_OS_X_Porting_-_Work_Areas/Todo%27s]&lt;br /&gt;
&lt;br /&gt;
Help:&lt;br /&gt;
&lt;br /&gt;
#Teach tools between us&lt;br /&gt;
#Do a debug party on IRC&lt;br /&gt;
#write documentation&lt;br /&gt;
&lt;br /&gt;
Meet us:&lt;br /&gt;
&lt;br /&gt;
#IRC&lt;br /&gt;
#Mac Meeting (like nov2005 in Hamburg?)&lt;br /&gt;
&lt;br /&gt;
Inform:&lt;br /&gt;
&lt;br /&gt;
#Update website regularly&lt;br /&gt;
#Blogs&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;WHO&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
Mac Team:&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;vertical-align:top; text-align:left; background-color:#efefef;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#d6d6d6;font-weight:bold;&amp;quot; &lt;br /&gt;
|Developer \ skills || build || write code || code review || debug/trace (higher is better) || contribute to documentation ||&lt;br /&gt;
|-&lt;br /&gt;
|ericb|| x || x || || 1 || x ||&lt;br /&gt;
|-&lt;br /&gt;
|pjanik|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|ssa|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|maho|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|tinor|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|schmidtm|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|ebischoff|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|obr|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|cl|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|aliscafo|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|fheckl|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Fridrich|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|plipli|| || x || || || x ||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Other resources&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
fonts: ?&lt;br /&gt;
&lt;br /&gt;
events: ?&lt;br /&gt;
&lt;br /&gt;
QA: James McKenzie leads QA for the Mac OS X port of OpenOffice.org and is looking for volunteers to spread this effort over several people and needs people from all over the world to test various languages.&lt;br /&gt;
&lt;br /&gt;
graphical: ?&lt;br /&gt;
&lt;br /&gt;
Communication: ?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;WHAT&amp;#039;&amp;#039;&amp;#039;: Status of most important tasks&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;vertical-align:top; text-align:left; background-color:#efefef;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#d6d6d6;font-weight:bold;&amp;quot; &lt;br /&gt;
| Task || Names|| Urgency (1=higher)|| Work in Progress || Done || Code review || Debug || Integration || &lt;br /&gt;
|-&lt;br /&gt;
|Get rid of X11||done || 1 || x || x || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Bundle|| || 1 || x || || || || | ||&lt;br /&gt;
|-&lt;br /&gt;
|Drawing|| || 1 || x || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Fonts||plipli || 1 || x || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Events management|| || 2 || x || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Controls (see list) ||ericb, aliscafo || 2 || x || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Native FilePicker||Florian Heckl, Pavel Janik || 3 || x || x || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Native Printing||Yvan Barthelemy || 3 || x || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Native SpellChecker|| || 4 || || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Player||Mox Soini || 4 || x || || || || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Other tasks:&lt;br /&gt;
&lt;br /&gt;
Help for writing bug lists, status of bugs ..etc&lt;br /&gt;
&lt;br /&gt;
Write howto use gdb, leaks, other tools&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;WHEN&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
From Christian Lippka (last meeting, 25th of august 2006): &lt;br /&gt;
 Aug 26 00:21:38 ChristianL&lt;br /&gt;
 from my point of view what is missing for point 1:&lt;br /&gt;
 text layout, complete font support, keyboard support,&lt;br /&gt;
 fixing repaint issues, having aqua install and run out of the box&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;September 2006&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Present the current state of the project at the 2006 OpenOffice conference in Lyon and Paris&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Late 2006&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
fix OpenOffice.org launch&lt;br /&gt;
fix drawing (repainting)&lt;br /&gt;
Implement missing methods and fix most important bugs (mainly the one leading to crash) in:&lt;br /&gt;
ATS&lt;br /&gt;
Salgraphics&lt;br /&gt;
Salinstance&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;January or February 2007&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
make Java work (works partially)&lt;br /&gt;
make intensive debug&lt;br /&gt;
present something working as alpha&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;June 2007	&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Implementation of:&lt;br /&gt;
native filepicker&lt;br /&gt;
native printing&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Become a Domain Developer for Mac OS X port&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
People regularly contributing to Mac OS x port with regular and quality patches are, after proposal, invited to become a [[DomainDeveloper]].&lt;br /&gt;
&lt;br /&gt;
The purpose of this document is to clearly define all the steps to become a [[DomainDeveloper]]. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Preliminary :  step 1 in  [[Commit_Rights]] must be completed and checked, and you must be in the list of [[http://www.openoffice.org/FAQs/faq-licensing.html#jca1 JCA Licensed people]]&lt;br /&gt;
&lt;br /&gt;
=== Steps for ssh2 key to be uploaded ===&lt;br /&gt;
&lt;br /&gt;
==== Create the key ====&lt;br /&gt;
&lt;br /&gt;
Everything is described here : [[http://www.openoffice.org/scdocs/ddSSHGuide.html SSH Guide]] &lt;br /&gt;
&lt;br /&gt;
==== Upload the key ====&lt;br /&gt;
&lt;br /&gt;
You must create an issue, like described below  :&lt;br /&gt;
&lt;br /&gt;
Component : www&lt;br /&gt;
&lt;br /&gt;
Sub Component : openoffice.org cvs&lt;br /&gt;
&lt;br /&gt;
Title : CVS Commit access request&lt;br /&gt;
&lt;br /&gt;
Add louis ( Louis Suarez Potts) or st ( Stefan Taxhet ) on CC&lt;br /&gt;
&lt;br /&gt;
Upload your ssh2 public key respecting the process ( Attach a DSA key, not an RSA )&lt;br /&gt;
&lt;br /&gt;
A project lead will confirm your request &lt;br /&gt;
&lt;br /&gt;
Then the support will upload your key&lt;br /&gt;
&lt;br /&gt;
Once done the issue is set to Fixed , and the next step has to be verified before &amp;#039;&amp;#039;&amp;#039;you&amp;#039;&amp;#039;&amp;#039; close it.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;EXAMPLE&amp;#039;&amp;#039;&amp;#039; : [[http://www.openoffice.org/issues/show_bug.cgi?id=75291 Upload SSH2 Key for Etsushi Kato]]&lt;br /&gt;
&lt;br /&gt;
==== Verify it works ====&lt;br /&gt;
&lt;br /&gt;
You now can try to connect via tunnel, and follow instructions given [[http://www.openoffice.org/scdocs/ddSSHGuide.html SSH Guide]] &lt;br /&gt;
&lt;br /&gt;
If something goes wrong, ask for help to support, with a maximum of details, to solve the problem.&lt;br /&gt;
&lt;br /&gt;
Once it works, the issue can be closed, and you can e.g. test downloading a module from tunnel repository :&lt;br /&gt;
&lt;br /&gt;
First create a tunnel with the command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh -2 -x -L 2401:localhost:2401 tunnel@openoffice.org&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then in a new window:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export CVSROOT=&amp;quot;:pserver:your_login@localhost:/cvs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
cvs login ( enter )&lt;br /&gt;
&lt;br /&gt;
(your password )&lt;br /&gt;
&lt;br /&gt;
mkdir TEST&lt;br /&gt;
&lt;br /&gt;
cd TEST&lt;br /&gt;
&lt;br /&gt;
cvs -z4 co -r SRC680_m205 vcl &lt;br /&gt;
&lt;br /&gt;
cd vcl &lt;br /&gt;
&lt;br /&gt;
cat CVS/Root  -&amp;gt; should indicate : your local repository&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ask for CVS access for all modules required ===&lt;br /&gt;
&lt;br /&gt;
Two steps : create an issue is mandatory because the concerned project is tools, and because people can have only ssh2 key without being [[DomainDeveloper]].&lt;br /&gt;
&lt;br /&gt;
==== Create an issue ====&lt;br /&gt;
&lt;br /&gt;
You must create an issue, described below  :&lt;br /&gt;
&lt;br /&gt;
Component : tools&lt;br /&gt;
&lt;br /&gt;
Sub Component : www&lt;br /&gt;
&lt;br /&gt;
Title : CVS access to all modules required&lt;br /&gt;
&lt;br /&gt;
Assigned to mh  +  CC for ericb and/or pjanik&lt;br /&gt;
&lt;br /&gt;
Present yourself quickly, and ask the access&lt;br /&gt;
&lt;br /&gt;
A project lead will confirm&lt;br /&gt;
&lt;br /&gt;
An admin will confirm this is ok, and set the issue to Fixed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;EXAMPLE&amp;#039;&amp;#039;&amp;#039; : [[http://www.openoffice.org/issues/show_bug.cgi?id=75494 CVS Access all modules for Etsushi Kato]]&lt;br /&gt;
&lt;br /&gt;
==== Verify ====&lt;br /&gt;
&lt;br /&gt;
Create the tunnel :&lt;br /&gt;
&lt;br /&gt;
open a terminal and type :&lt;br /&gt;
&lt;br /&gt;
ssh -2 -x -L 2401:localhost:2401 tunnel@openoffice.org&lt;br /&gt;
&lt;br /&gt;
once logged in, open a new terminal, and do ( for example ):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd $OOO_SRC_ROOT/&lt;br /&gt;
&lt;br /&gt;
source MacOSXPPCEnv.Set.sh  { source MacOSXX86Env.Set.sh for Mac Intel }&lt;br /&gt;
&lt;br /&gt;
cd vcl  ( for example )&lt;br /&gt;
&lt;br /&gt;
IMPORTANT : be sure vcl has been checked from tunnel, not from anoncvs ( cat CVS/Root will give you the answer )&lt;br /&gt;
&lt;br /&gt;
export CWS_WORK_STAMP=aquavcl01   # Only needed for working with [[EIS]], can change for a different CWS ;) &lt;br /&gt;
&lt;br /&gt;
cd aqua/source/gdi&lt;br /&gt;
&lt;br /&gt;
add your changes to your_file.cxx, then commit :&lt;br /&gt;
&lt;br /&gt;
cvs commit -m &amp;quot;#i75689# bla bla ... the reason of the modification(s)&amp;quot;  your_file.cxx  # The #i75689# is an issue number in the tracker&lt;br /&gt;
&lt;br /&gt;
cvs update&lt;br /&gt;
&lt;br /&gt;
If nothing is wrong, cvs update should not return M for your_file.cxx, means the commit is successfull.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
In case of problem, use the issue until it is fixed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;#039;&amp;#039;&amp;#039;Welcome aboard :)&amp;#039;&amp;#039;&amp;#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Mac OS X porter Team at WWDC 2007&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
=== What is WWDC 2007 ? ===&lt;br /&gt;
&lt;br /&gt;
See [http://developer.apple.com/wwdc/ Apple WWDC 2007]&lt;br /&gt;
&lt;br /&gt;
=== Our Objectives at the WWDC 2007 ===&lt;br /&gt;
&lt;br /&gt;
1) Contacts with Apple&amp;#039;s teams : &lt;br /&gt;
&lt;br /&gt;
* Present our current work, methods and team to Apple people, easy to meet only during WWDC ( Apple people can give us a face, and keep the contact )&lt;br /&gt;
&lt;br /&gt;
=&amp;gt; There is information difficult to find or ask by email, or IRC or whatever web : direct contact saves a lot of time, and is a very efficient way to progress with code&lt;br /&gt;
&lt;br /&gt;
* Get their impression about what we have already done and what is still ToDo&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2) Mac Team&amp;#039;s goals on Aqua OOo -&amp;gt; Apple&amp;#039;s Expertise : &lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Give MacOS X users the OOo suite they deserve&amp;quot; :&lt;br /&gt;
&lt;br /&gt;
 =&amp;gt; As mac platform and apple&amp;#039;s product fans, we are proud to bring the quality and power of OOo to mac users community&lt;br /&gt;
 =&amp;gt; Make OOo uses all the power of Mac OSX, including upcoming Leopard !&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;OOo to be as Apple HIG compliant as possible&amp;quot; :&lt;br /&gt;
&lt;br /&gt;
 =&amp;gt; Define what is expected for User Interface with people from Apple UI project&lt;br /&gt;
&lt;br /&gt;
 - FYI : Last year, Apple UI project proposed ericb to help us, once our native menus will be working. &lt;br /&gt;
&lt;br /&gt;
This is now done, and meet them cannot be a bad idea :)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3) Get code guidelines, tips, samples : &lt;br /&gt;
&lt;br /&gt;
 =&amp;gt; Ask for code review and find code snippets for :&lt;br /&gt;
&lt;br /&gt;
- HIView&lt;br /&gt;
- Printing&lt;br /&gt;
- Drag and Drop&lt;br /&gt;
+ more if possible&lt;br /&gt;
&lt;br /&gt;
=&amp;gt; More than 1000 Apple engineers are present, and can answer our questions regarding the code, during the whole week&lt;br /&gt;
&lt;br /&gt;
During WWDC2006 we found all the relevant informations for RunApplicationEventLoop() to be implemented . Without this code, we wouldn&amp;#039;t have something working at all, because this event loop is the key for everything in OpenOffice.org on Mac OS X ( without X11 ).&lt;br /&gt;
&lt;br /&gt;
4) Social Contract : Discuss and meet new developers and / or american people working for Mac OS X port (like Michael Sicotte, Vijay Venkatraman , other.. )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5) Visibility : make OpenOffice.org project visible in an ocean of other software. This is extremely important because it shows that OpenOffice.org project is alive for Mac OS X platform. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Who ? ===&lt;br /&gt;
&lt;br /&gt;
* Sébastien Plisson&lt;br /&gt;
* Shaun McDonald&lt;br /&gt;
* Eric Bachard&lt;br /&gt;
&lt;br /&gt;
=== Todo list ===&lt;br /&gt;
&lt;br /&gt;
Please add topics, technical questions you would see asked by attendees to Apple engineers during WWDC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mike Sicotte:  &lt;br /&gt;
I understood that implementing printing in aqua OOo was a topic that we didn&amp;#039;t get accepted into Google SOC - so remains on the ToDo list.  I notice that there are three Sessions specfically related to printing at WWDC:&lt;br /&gt;
    Leveraging the Common Unix Printing System (CUPS)&lt;br /&gt;
    Printing with Style in Mac OS X&lt;br /&gt;
    Printing Lab&lt;br /&gt;
If this is judged to be a good use of time at WWDC I would be willing to spend some time to help further develop the questions to be addressed with the Apple engineers.&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Mac OS X porter Team at OOoCon 2007&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
=== Who ? ===&lt;br /&gt;
&lt;br /&gt;
* Shaun McDonald&lt;br /&gt;
* Eric Bachard&lt;br /&gt;
&lt;br /&gt;
=== What ? ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The conference is over 3 days. Presentations should last around 45 minutes. http://www.openoffice.org/servlets/ReadMsg?list=announce&amp;amp;msgNo=320 Papers have to be submitted by 1st June to be considered.&lt;br /&gt;
&lt;br /&gt;
Ideas :&lt;br /&gt;
&lt;br /&gt;
Mike Sicotte:  Perhaps the results of the Google SOC could be a presentation.&lt;br /&gt;
&lt;br /&gt;
*create a complete topic for Mac port (one stream for a day or half day)&lt;br /&gt;
*How to improve ooo usability though the use of floating palettes instead of modal dialogs&lt;br /&gt;
&lt;br /&gt;
- several presentations / BOF &lt;br /&gt;
&lt;br /&gt;
Eric Bachard : Aqua OpenOffice.org ( conf / 1 hour )&lt;br /&gt;
&lt;br /&gt;
Others ?&lt;br /&gt;
&lt;br /&gt;
*reserve rooms together ? Better rent a house? &lt;br /&gt;
&lt;br /&gt;
* [FIXME]&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;2nd Mac porters meeting&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
This section has been moved to [[2nd Mac porters meeting]]&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;IRC Mac port meetings&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
This section has been moved to [[MacOSXPortMeetings]].&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Mac OS X (X11) Quality Assurance&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
This section has been moved to [[Mac OS X ( X11) Quality Assurance]]&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Mac OS X Implementing HIView and Carbon events&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
This section has been moved to [[Mac OS X Implementing HIView ]]&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Debug OpenOffice.org using XCode &amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
[[ MacOSX Debug OpenOffice.org using XCode]]&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Description of the Native Port problem&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
=== How does OpenOffice.org work on Mac OS X? ===&lt;br /&gt;
&lt;br /&gt;
Currently, on Mac OS X, OpenOffice.org uses X11, as &amp;quot;client&amp;quot;: X11 is a graphical server, coming from Unix world, and able to run under Linux, *BSD, Solaris, Mac OS X.&lt;br /&gt;
&lt;br /&gt;
 - X11 is run as an application, managed like other Apple applications.&lt;br /&gt;
 - All unix like applications are managed by X11, and from Aqua environment, only X11 is seen as only one applicatiion, &lt;br /&gt;
  even if other Unix/Linux (e.g.) applications are runing.&lt;br /&gt;
&lt;br /&gt;
OpenOffice.org asks X11 to display a window, waits for X11 acknowledgment, and OpenOffice.org displays the window. All transactions use the network, locally or not. the same mechanism is used for everything to be displayed.&lt;br /&gt;
&lt;br /&gt;
[[User:Ericb|Ericb]] 11:39, 3 June 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
=== Issues and known problems ===&lt;br /&gt;
&lt;br /&gt;
All events are managed by OpenOffice.org and X11, using the Xlib&lt;br /&gt;
&lt;br /&gt;
Only .ttf fonts type is currently available. Note: &amp;#039;&amp;#039;&amp;#039;system fonts are available &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
The rendering is made by X11, not by Mac OS X rendering engine.&lt;br /&gt;
&lt;br /&gt;
X11 and all its clients are seen as one application only: drag and drop protocol does not work because of that (solution: Pasteboard Manager)&lt;br /&gt;
&lt;br /&gt;
==== Other links ====&lt;br /&gt;
&lt;br /&gt;
http://wiki.services.openoffice.org/wiki/List_of_OpenOffice.org_Mac_OS_X_issues_and_problems#&lt;br /&gt;
&lt;br /&gt;
http://wiki.services.openoffice.org/wiki/Printing_problems_with_OpenOffice.org_2.0_for_Mac_OS_X#Reporting_printing_problems&lt;br /&gt;
&lt;br /&gt;
[[User:Ericb|Ericb]] 11:39, 3 June 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
== What do we have to do?==&lt;br /&gt;
&lt;br /&gt;
* (in progress) : Implement direct access to Apple graphical engine, using Apple API: Quartz2D/CoreGraphics (and replacing Xlib use)&lt;br /&gt;
&lt;br /&gt;
like: instantiate, manage events and threads for a graphical instance + all needed objects, drawing: manage all drawing cases&lt;br /&gt;
&lt;br /&gt;
* (in progress) : Implement native events management, using CarbonEventManager (replacing Xlib management)&lt;br /&gt;
&lt;br /&gt;
* (in progress) : Implement native font use, using Apple Type Server and ATSUI (for Unicode Imagery) (replacing X11 management)&lt;br /&gt;
&lt;br /&gt;
Work in progress: [[Mac OS X Porting - Native Fonts]]&lt;br /&gt;
&lt;br /&gt;
* Implement native sound, using QuickTime (replacing Java Media Framework): [[Mac OS X Porting - Native Audio and Video]]&lt;br /&gt;
&lt;br /&gt;
* Implement native Drag and drop, Implementing Pasteboard Manager: [[Mac OS X Porting - Native Drag and drop]]&lt;br /&gt;
&lt;br /&gt;
* (done experimental) Implement Native Filepicker&lt;br /&gt;
&lt;br /&gt;
* Implement Native Printing: current uses cups, but native printing is mandatory: [[Mac OS X Porting - Native_Printing]]&lt;br /&gt;
&lt;br /&gt;
* Implement Apple Spellchecker&lt;br /&gt;
&lt;br /&gt;
--[[User:Plipli|Plipli]] 09:27, 25 March 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Where is located the code to be modified?&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
Most of the changes are located in vcl (Visual Class Layer), for everything graphical, events, fonts, rendering and printing.&lt;br /&gt;
&lt;br /&gt;
Other, for sound and movies will be in avmedia (where the player is implemented in OpenOffice.org sources).&lt;br /&gt;
&lt;br /&gt;
For drag and drop, dtrans is concerned (Pasteboard Manager implementation)&lt;br /&gt;
&lt;br /&gt;
[FIXME]: Filepicker? Apple Spellchecker?&lt;br /&gt;
&lt;br /&gt;
[[User:Ericb|Ericb]] 11:39, 3 June 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;How will the new implementation be tested?==&lt;br /&gt;
&lt;br /&gt;
Currently, all openOffice.org code can be compiled without using the Xlib. but of course, a lot of features are missing,&lt;br /&gt;
&lt;br /&gt;
and the final package simply won&amp;#039;t work&lt;br /&gt;
&lt;br /&gt;
In vcl module&amp;quot;, a &amp;#039;&amp;#039;&amp;#039;toy&amp;#039;&amp;#039;&amp;#039; called svdem is built at buildtime. This binary is linked to libvcl* and so all new stuff can be tested.&lt;br /&gt;
&lt;br /&gt;
e.g. : draw anti-aliased lines works well. &lt;br /&gt;
&lt;br /&gt;
Everything implemented in aqua vcl code will be included in libvclplug_aqua, and svdem source code will contain a specific part to proceed tests.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;messagebox cleanup metadata&amp;quot; style=&amp;quot;border:1px solid blue;background-color:#B3FFF5;padding:7px;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;The magic is: when all needed features will work with svdem, it will work in the new version of OpenOffice.org !!&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[FIXME]: add more complete list of features to implement and test.&lt;br /&gt;
&lt;br /&gt;
== AquaVCL 01 cws ==&lt;br /&gt;
&lt;br /&gt;
[[http://qa.openoffice.org/issues/buglist.cgi?keywords=aqua Top 10 of Aqua issues]]&lt;br /&gt;
&lt;br /&gt;
[[Aquavcl01 tasks]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Changelog ===&lt;br /&gt;
&lt;br /&gt;
====Work in progresss : alpha 0.6 ====&lt;br /&gt;
&lt;br /&gt;
Started (19th March ) : &lt;br /&gt;
&lt;br /&gt;
Michael Sicotte proposed to investigate in timers, and continue [[http://www.openoffice.org/issues/show_bug.cgi?id=75228 Pavel&amp;#039;s work]] : objective is to replace obsolete code.  ( 23th March)&lt;br /&gt;
&lt;br /&gt;
[experimental] plipli proposed a patch for a new salframe implementation, using HIView + optionally compositing  (21th March )&lt;br /&gt;
&lt;br /&gt;
[commit scheduled] Michael Sicotte proposed a complete patch for invert() ( SAL_INVERT SAL_INVERT_50 and SAL_INVERT_TRACKFRAME )  (20th March )&lt;br /&gt;
&lt;br /&gt;
Tino proposed to work on code cleanup in salatsuifontutils.cxx, removing obsolete code &lt;br /&gt;
&lt;br /&gt;
ismael and michael work on invert() + drawAlphaRect() &lt;br /&gt;
&lt;br /&gt;
Damien started to work on drawEPS() &lt;br /&gt;
&lt;br /&gt;
plipli and ericb work on refresh&lt;br /&gt;
&lt;br /&gt;
==== alpha 0.5====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Top 10 Summary :  7 issues over 10 are fixed or very close to be : &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;time to code review, tracing, and search for memory leaks&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[done] Unicode input in salframe ( ekato ) ( 19th March )&lt;br /&gt;
&lt;br /&gt;
[experimental, works partially] beginning of HIView + HIComboxes works (text still missing)  (ericb + plipli)  ( 14th March ) &lt;br /&gt;
&lt;br /&gt;
[done] replace NewRgn() in salframe (ericb (11th March )&lt;br /&gt;
&lt;br /&gt;
[experimental, but very interesting] Improved native windows ( ismael ) ( 7th March )&lt;br /&gt;
&lt;br /&gt;
====alpha 0.4==== &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[Informative]&amp;#039;&amp;#039;&amp;#039; build runs with Leopard 9A377a ( fheckl ) ( 7th March ) &lt;br /&gt;
&lt;br /&gt;
Refresh screen issues  (plipli) (4th to 10th March )&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[informative]&amp;#039;&amp;#039;&amp;#039;  plipli announced  progress with refresh screen issues  ( 28th February )&lt;br /&gt;
&lt;br /&gt;
[experimental, not yet commited] Proxy configuration from system ( pjanik)  ( 28th February )&lt;br /&gt;
&lt;br /&gt;
[done] highlighted native button ( pjanik)  ( 27th February ) &lt;br /&gt;
&lt;br /&gt;
Native File Picker works ( fheckl  / pjanik )  ( 23th February  )&lt;br /&gt;
&lt;br /&gt;
====alpha 0.3====&lt;br /&gt;
&lt;br /&gt;
Cursor does appear -&amp;gt; invert() + setting a setBlinkTime value in UpdateSettings()  (pjanik /ericb ) &lt;br /&gt;
&lt;br /&gt;
[done] mirroring negative images (ismael) + DrawAlphaBitmap() + CreateWithMask()&lt;br /&gt;
&lt;br /&gt;
pjanik patch for Focus Events &lt;br /&gt;
&lt;br /&gt;
[done] scrolling works ( pjanik ) (17th February )&lt;br /&gt;
&lt;br /&gt;
[done ] carret works ( plipli) (17th February )&lt;br /&gt;
&lt;br /&gt;
[done] checkbuttons fix for checkmarks  (ericb) ( 17th February )&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[Informative]&amp;#039;&amp;#039;&amp;#039; Pavel Janik propose to solve offScreen buffer using HIView ( 17th February ) &lt;br /&gt;
&lt;br /&gt;
[experimental, never commited] patch for macosxrc.txt use + UpdateSettings() use in salframe.cxx ( ericb ( 16th February )&lt;br /&gt;
&lt;br /&gt;
Michael Sicotte joined the Team ( 15th February )&lt;br /&gt;
&lt;br /&gt;
invert() : first try  (ericb)   ( 13th february )&lt;br /&gt;
&lt;br /&gt;
====alpha 0.2====&lt;br /&gt;
&lt;br /&gt;
[12th February 2007 ]&lt;br /&gt;
&lt;br /&gt;
[done] calc does not start : bug identified by tino , first workaround (ericb)   [[http://www.openoffice.org/issues/show_bug.cgi?id=73691 issue 73691]]&lt;br /&gt;
&lt;br /&gt;
[done] bitmaps in native popup menus (ismael)  &lt;br /&gt;
&lt;br /&gt;
[done]  replace obsolete code for HandleWindowPaintEvent(), newRgn() .. etc  (ericb)  (12th February)&lt;br /&gt;
&lt;br /&gt;
correct salatslayout patch (plipli)  ( 11th February)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[Informative]&amp;#039;&amp;#039;&amp;#039;  Michel Renon proposed a summary about his work on fonts issues&lt;br /&gt;
&lt;br /&gt;
[patch] Pavel fixed several menu crashes (09th February )&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[Informative]&amp;#039;&amp;#039;&amp;#039; : Pavel posted a mail about several crashes origin &lt;br /&gt;
 &lt;br /&gt;
patch for radioboxes and checkboxes ( ericb ) (9th February)&lt;br /&gt;
&lt;br /&gt;
first complete patch for salatslayout.cxx ( plipli) ( 9th February )&lt;br /&gt;
&lt;br /&gt;
[done] most important crashes fixed ( pjanik)  ( 09th february )&lt;br /&gt;
&lt;br /&gt;
Modified baseline for 2.2. : Mac OS X10.4 -&amp;gt; Aqua will be 10.4 and 10.5 compatible only ( ericb)&lt;br /&gt;
&lt;br /&gt;
first try with multi line sallayout (plipli )  ( 08th February )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Damien Duportal joined the Team ( 7th February ) &lt;br /&gt;
&lt;br /&gt;
[done] scrollbar changes (ericb )   ( 4th February )&lt;br /&gt;
&lt;br /&gt;
====alpha 0.1====&lt;br /&gt;
&lt;br /&gt;
create Top 10 of issues before alpha  3rd February 2007 :  See : [[http://porting.openoffice.org/mac/news/2007/20070203toptenbeforealpha.html Top 10 of issues]]&lt;br /&gt;
&lt;br /&gt;
[experimental, not commited] patch for TPT() implementation (ericb)  ( 2nd February 2007 )&lt;br /&gt;
&lt;br /&gt;
Pavel Janik proposed to implement TransformProcessType() ( 2nd February 2007 )&lt;br /&gt;
&lt;br /&gt;
[not commited] implement UpdateSettings()   (ericb)  &lt;br /&gt;
&lt;br /&gt;
Pavel Janik resynchronized aquavel01 cws  with m202  ( 2nd February 2007 )&lt;br /&gt;
&lt;br /&gt;
====alpha 0.03====&lt;br /&gt;
&lt;br /&gt;
Michel Renon joined the Team (1st February )&lt;br /&gt;
&lt;br /&gt;
[done] fix checkbuttons and radiobuttons issues: offsets, redrawing of the check marks ( ericb) &lt;br /&gt;
&lt;br /&gt;
[done] fix scrollbar buttons (implement correct methods to retrieve dimensions)&lt;br /&gt;
&lt;br /&gt;
[done] implement mapfiles for Mac OS X (Stephan Bergmann, Daniel Boelzle, Tino Rachui , Pavel Janik)&lt;br /&gt;
&lt;br /&gt;
====alpha 0.02====&lt;br /&gt;
&lt;br /&gt;
[done] modify libsalsystools.dylib to be correctly loaded with the bundle  (ericb, + pjanik)&lt;br /&gt;
&lt;br /&gt;
[done] add mouse drag events  ( pjanik )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====alpha 0.01====&lt;br /&gt;
&lt;br /&gt;
[done] add new feature for Aqua windows, to allow QuickTime player use( mox )&lt;br /&gt;
&lt;br /&gt;
[done] replace obsolete code in salframe.cxx with (ericb)&lt;br /&gt;
&lt;br /&gt;
[done] fix correct size for main window (GetOptimaWindowSize()  ) (ericb)&lt;br /&gt;
&lt;br /&gt;
[done] fix alpha channel in pixmaps (ismael)&lt;br /&gt;
&lt;br /&gt;
====alpha 0.0====&lt;br /&gt;
&lt;br /&gt;
[done] pushbutton where not correctly drawn (ericb)&lt;br /&gt;
&lt;br /&gt;
[done] fix missing mouse events  (pjanik)&lt;br /&gt;
&lt;br /&gt;
[done] fix nRepeat in text entry  (ssa)&lt;br /&gt;
&lt;br /&gt;
2nd Mac porters Meeting&lt;br /&gt;
&lt;br /&gt;
===Work in progress ===&lt;br /&gt;
&lt;br /&gt;
URGENT :&lt;br /&gt;
&lt;br /&gt;
Top of issues causing crashes : event issue when tips is enabled causes crashes ( well known window / handler  / window desctructor / event loop bug )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Salatsuifontutils :  replace old code, track leaks : tino&lt;br /&gt;
&lt;br /&gt;
[done] Bitmaps : ( isma87) &lt;br /&gt;
&lt;br /&gt;
[running]  Crashes : (tino, pjanik, ericb, isma87, plipli )&lt;br /&gt;
&lt;br /&gt;
[???] Drag and drop :   (vijay)&lt;br /&gt;
&lt;br /&gt;
[???] Printing   (ybart)  &lt;br /&gt;
&lt;br /&gt;
Florian Heckl proposed a subject for Google Summer of Code about native printing&lt;br /&gt;
&lt;br /&gt;
Drawing/ windowing ( plipli / ericb ) -&amp;gt; mainly refresh &lt;br /&gt;
&lt;br /&gt;
[done] Implement cursor &lt;br /&gt;
&lt;br /&gt;
[started] Native Controls   (ericb) &lt;br /&gt;
&lt;br /&gt;
[work in progress] partial multiline sallayout  (plipli )&lt;br /&gt;
&lt;br /&gt;
To do : &lt;br /&gt;
&lt;br /&gt;
(started, Oliver) - modify the tree to make the bundle start without hack ( issue fixed during buildtime) &lt;br /&gt;
&lt;br /&gt;
(started, Florian Heckl)  verify Native FilePicker implementation ( works , tested in Hamburg  )&lt;br /&gt;
&lt;br /&gt;
[done] Ismael Merzaq)  implement blit functions in salgdi  ( important fix:  probably apha version to be tested once done) &lt;br /&gt;
&lt;br /&gt;
[done] Sebastien Plisson- update the missing functions list ( fonts ... ask hdu &amp;amp; cl&lt;br /&gt;
&lt;br /&gt;
[started] ericb, Mox Soini, Sebastien Plisson, Tino Rachui, Pavel janik continue to replace obsolete code&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
fix crashes with menus  (started : tino )&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Sort of documentation about VCL around Native Mac OS X port&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Do we really need to understand how it works? ;-)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vcl content:&lt;br /&gt;
&lt;br /&gt;
ls -laR | wc -l&lt;br /&gt;
  1750&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; Uff 1750 files to analyse :-/&lt;br /&gt;
&lt;br /&gt;
Our purpose is to describe the vcl organisation. The content of vcl is so important, that at the begining, the content will looks a bit confused. e.g. class names ..etc have nothing to do, only description with words and sense, but this will need some time before we can understand everything.&lt;br /&gt;
&lt;br /&gt;
How analyse with more efficiency? After some months to anlalyse &amp;#039;&amp;#039;&amp;#039;&amp;quot;horizontaly&amp;quot;&amp;#039;&amp;#039;&amp;#039;, it appears that list all the content of a directory is not the solution. Of course, we learned a lot, but we now have to complete with &amp;#039;&amp;#039;&amp;#039;&amp;quot;orthogonal&amp;quot;&amp;#039;&amp;#039;&amp;#039; method (compared to the previous one). The first method wasn&amp;#039;t obviously not the good/best way to describe vcl.&lt;br /&gt;
 &lt;br /&gt;
[FIXME] a different approach (will ask confirmation to Philipp Lohman), could be a description of how it work in runtime. First define what an instance is, a frame, and what exactly is concerned by such &amp;quot;objects&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
With that, we can write a list of different objects all using the same scheme: empty boxes (means pure virtual methods and classes in generic libvvcl), really implemented in the specific part, and finally, the API &amp;quot;encapsulated&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The most difficult is to see where the API is used. But for all the parts, this is the same.&lt;br /&gt;
&lt;br /&gt;
Finally, &amp;#039;&amp;#039;&amp;#039;what is important is the design of vcl&amp;#039;&amp;#039;&amp;#039;. Which &amp;#039;&amp;#039;&amp;#039;patterns&amp;#039;&amp;#039;&amp;#039; are used? What are the dependencies, how works the stack for the events, how works the scheduler, the timers too is very important, even fundamental for Aqua implementation. Will have a look at gsl mailing list, and other resources. Probably everything is already (randomly) written somewhere.&lt;br /&gt;
&lt;br /&gt;
=== VCL organisation ===&lt;br /&gt;
&lt;br /&gt;
Thank&amp;#039;s to Philipp Lohmann for this short, but precise description:&lt;br /&gt;
&lt;br /&gt;
Basically vcl is divided in the system dependent and the system independent part. The interface between these two is mostly the Sal interface (every interface name Sal*: SalInstance, SalFrame, SalGraphics, SalPrinter, etc.).&lt;br /&gt;
&lt;br /&gt;
SalInstance is a factory that can create all the other abstracted interfaces of the system dependent part. It also provides the main loop SalInstance::Yield()&lt;br /&gt;
&lt;br /&gt;
SalFrame abstracts any kind of system window.&lt;br /&gt;
&lt;br /&gt;
SalVirtualDevice abstracts an offscreen window (e.g. a Pixmap on X11)&lt;br /&gt;
&lt;br /&gt;
SalPrinter and SalInfoPrinter abstract the system print queues where SalInfoPrinter is for querying and SalPrinter for actual printing.&lt;br /&gt;
&lt;br /&gt;
SalGraphics is an interface produced by either SalFrame, SalVirtualDevice or SalPrinter which is used for actual drawing operations (text, bitmaps, vector graphics)&lt;br /&gt;
&lt;br /&gt;
SalSound is for sound playing.&lt;br /&gt;
&lt;br /&gt;
SalBitmap provides memory for bitmap graphics as well as methods converting this memory to a system handle (e.g. a Pixmap on X11).&lt;br /&gt;
&lt;br /&gt;
SalOpenGL provides OpenGL functionality if available.&lt;br /&gt;
&lt;br /&gt;
SalTimer is an interface for periodically triggering the event queue (to timer implementation).&lt;br /&gt;
&lt;br /&gt;
SalI18NImeStatus handles how the status window of an Input Method Editor (IME) should display (this is mainly X11 specific).&lt;br /&gt;
&lt;br /&gt;
SalSystem has some system specific methods that did not belong anywhere else:-)&lt;br /&gt;
&lt;br /&gt;
Of all these there interfaces is at least one implementation per system (Windows, X11 or Mac). The Unix implementation also has a plugin concept to allow for integration of different native toolkits (currently gtk and Qt) which became necessary for the implementation of Native Widget Framework (NWF) to display controls like their normal desktop counterparts.&lt;br /&gt;
&lt;br /&gt;
Basically the independent part (what is beneath vcl/source directory) has generic methods for drawing, window handling and stuff which it brings into a suitable form and then delegates to the system specific implementation (located beneath vcl/win for Windows and vcl/unx for the X11 platforms).&lt;br /&gt;
&lt;br /&gt;
[[User:Ericb|Ericb]] 16:12, 1 July 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
===Sub-directories description ===&lt;br /&gt;
&lt;br /&gt;
==== &amp;#039;&amp;#039;&amp;#039;Organisation of vcl directories&amp;#039;&amp;#039;&amp;#039; ====&lt;br /&gt;
&lt;br /&gt;
[[Image:aquavcl_organisation_complete_02.jpg]]&lt;br /&gt;
&lt;br /&gt;
==== &amp;#039;&amp;#039;&amp;#039;Directories in vcl. Short description&amp;#039;&amp;#039;&amp;#039; ====&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; aqua &amp;#039;&amp;#039;&amp;#039;: The name Aqua means Apple look and feel, and is well known as [http://developer.apple.com/documentation/UserExperience/Conceptual/OSXHIGuidelines/XHIGIntro/chapter_1_section_1.html Aqua Human Interface Guidelines]. This look and feel means Mac OS X. The work was begun by (probably) P. luby, Dan Williams Herbert Duerr (most of fonts stuff) and Ed Peterlin. Currently in ruin, this directory does contain a lot of ideas to investigate. The most important part of needed changes for native version (3.0) will be done inside aqua dir inc: does contain all vcl relative includes [PART1]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; prj &amp;#039;&amp;#039;&amp;#039;: Does contain build.lst and d.lst build.lst give us dependencies: probably a lot for vcl, build 98th module over ~148. Everything graphical depends in vcl. &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; qa &amp;#039;&amp;#039;&amp;#039; does contain all quality assurancy stuff&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;source&amp;#039;&amp;#039;&amp;#039;: the most important:-) This directory contains common sources for all architectures and OS. Mainly: Windows, Unix: Linux , Mac OS X (X11), Solaris, including generic, kde and gtk plugins, and Aqua (Mac OS X without X11, work currently in progress). &lt;br /&gt;
&lt;br /&gt;
Depending on the OS and the architecture, binaries are built or not.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; test &amp;#039;&amp;#039;&amp;#039;: This directory does contain all the needed stuff for tests. As example, in qa/testdocuments, you&amp;#039;ll find three documents (one writer, one calc and one impress) for tests purpose. &lt;br /&gt;
Other available tests are about memcheck and persistent window state. &lt;br /&gt;
 &lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; unx &amp;#039;&amp;#039;&amp;#039;: this directory does contain all unixes stuff. We have to understand what is inside to implement aqua port. For example, a lot of classes/strutures and objects use Xlib calls we have to replace with Carbon/Cocoa call (at least at first time) for Mac OS X native port.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; win &amp;#039;&amp;#039;&amp;#039;: Doing Mac OS X native port, I first believed this directory was not interesting for us, but I was wrong: OpenOffice.org roots are inside this directory, and a lot of comments and resources are inside. Mainly interesting if Carbon is used.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;workben&amp;#039;&amp;#039;&amp;#039;: Does contain a toy called &amp;quot;svdem&amp;quot;. svdem is a binary, used for new implementations. For example, actual aqua development uses svdem intensively, to verify all important properties we need: &lt;br /&gt;
&lt;br /&gt;
- display a window first (al least ...:)) &lt;br /&gt;
&lt;br /&gt;
- close cleanly this window&lt;br /&gt;
&lt;br /&gt;
- display a point&lt;br /&gt;
&lt;br /&gt;
- trace a line&lt;br /&gt;
&lt;br /&gt;
- trace an area &lt;br /&gt;
&lt;br /&gt;
- superpose two areas doing some important graphical operations, (like xor),&lt;br /&gt;
&lt;br /&gt;
- display a character&lt;br /&gt;
&lt;br /&gt;
- display a menu. &lt;br /&gt;
&lt;br /&gt;
- intercept events correctly.&lt;br /&gt;
&lt;br /&gt;
[FIXME] add more tests&lt;br /&gt;
&lt;br /&gt;
[[User:Ericb|Ericb]] 13:21, 3 June 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Naming convention&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
* Class names start with upper case letters, to improve readability.&lt;br /&gt;
&lt;br /&gt;
* Implemented Class names are derived from the virtual classes but can of course take arbitrary names.&lt;br /&gt;
To increase readability, it&amp;#039;s recommended to closely follow the base class name.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Impl prefix: means Implementation details&amp;#039;&amp;#039;&amp;#039;. The concerned class or method or function is not used outside of this module, so no external code (or other libraries) can see it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[ Events types using Carbon API (Mac OS X): ]]&amp;#039;&amp;#039;&amp;#039; A lot of events have to be managed in runtime. Here is a short description&lt;br /&gt;
&lt;br /&gt;
- do not freeze because bad event loops&lt;br /&gt;
&lt;br /&gt;
- event types implementation: currently, they are defined in vcl/aqua/inc/aquavclevents.hxx&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Apart: exact sense of hedabu? -&amp;gt; [FIXME] as far as I understood it: it is like &amp;quot;copy&amp;quot; to deliver software into the solver, with extra magic. The header files for example are manipulated so paths need not be exact. &amp;quot;headabu&amp;quot; is supposed to disappear little by little.&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;What do we have to build in vcl?&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
Two libraries, corresponding ressources (localized) and a toy so called « svdem »&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Common part&amp;#039;&amp;#039;&amp;#039;: &lt;br /&gt;
&lt;br /&gt;
in grey on right. The result will be a non architecture dependant library, built in all cases: for instance, libvcl680mxi.dylib on Mac Intel.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Specific part  &amp;quot; a plugin &amp;quot; &amp;#039;&amp;#039;&amp;#039;: &lt;br /&gt;
&lt;br /&gt;
Light yellow: aqua part will only concern Mac OS X (non X11) the name will probably be libvcl_aqua680mxi.dylib &lt;br /&gt;
&lt;br /&gt;
As you can see, win means windows part, in blue&lt;br /&gt;
&lt;br /&gt;
For Unix build (Linux, Solaris or current Mac OS X X11), in purple.&lt;br /&gt;
&lt;br /&gt;
Result will be:&lt;br /&gt;
&lt;br /&gt;
libvclplug_PLUGIN680mxi.DLLSUFFIX , where PLUGIN can be iether gen (generic) or gtk (using gtk+) or kde (using qt), and DLLSUFFIX can be either .so (linux) or .dylib (Mac OS X) ...etc (I&amp;#039;m not sure for other cases).&lt;br /&gt;
&lt;br /&gt;
Example: libvcl680mxi.dylib and libvclplug_aqua680mxi.dylib&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;In runtime&amp;#039;&amp;#039;&amp;#039;, libvclplug_aqua will be linked to libvcl680. the first one will contain the real implementation (respecting the API, e.g. Carbon) while the generic libvcl will only contain pure virtual methods ...etc like &amp;quot;empty boxes&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Current Aqua content ===&lt;br /&gt;
&lt;br /&gt;
A more complete description of aqua (Mac OS X / no X11 specific): [[Image:Vcl_aqua_organisation_02_tree.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==EXISTING objects to build in aqua==&lt;br /&gt;
&lt;br /&gt;
===Sal APP &amp;quot;everything application&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
[FIXME] add all objects descriptions&lt;br /&gt;
&lt;br /&gt;
==== saldata ====&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Defined in plugin exclusively&amp;#039;&amp;#039;&amp;#039; (i.e. for headers)&lt;br /&gt;
&lt;br /&gt;
Unix: unx/source/app/saldata.cxx (header in unx/inc)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Aqua: aqua/source/app/saldata.cxx (header in win/inc)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Windows: win/source/app/saldata.cxx (header in aqua/inc)&lt;br /&gt;
&lt;br /&gt;
* Role: saldata contains various kind of data used by the implementation for the concerned platform. &amp;#039;&amp;#039;&amp;#039;It is a bunch of global data collections reserved for the platform&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
It is just completely platform dependent, and nobody except this plugin can see it.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Saldata is something like a &amp;quot;second sal&amp;quot;, but providing an abstraction regarding windowing and graphics&amp;#039;&amp;#039;&amp;#039;, while SAL module provides an abstraction more Operating System oriented) &lt;br /&gt;
&lt;br /&gt;
e.g. : have a look at XRequest array in vcl/unx/source/app/saldata.cxx =&amp;gt; all calls are for Xlib (X11).  Ok, useless there, but interesting:-)&lt;br /&gt;
&lt;br /&gt;
[FIXME]: use Windows implementation could be a good starting point. Nothing is the same, but the current aquavcl cws uses similar objects, and it works very correctly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
saldatax.cxx uses classes SalInstance, SalObject, SalFrame, SalVirtualDevice, SalPrinter and fontList.&lt;br /&gt;
&lt;br /&gt;
Current list of possible objects who can be instantiated/released:&lt;br /&gt;
&lt;br /&gt;
structure SalData: does contain pointers on all kind of objects from other classes used in saldata.&lt;br /&gt;
&lt;br /&gt;
inline functions: [FIXME]: complete the description&lt;br /&gt;
&lt;br /&gt;
- SetSalData:&lt;br /&gt;
- GetSalData:&lt;br /&gt;
- GetAppSalData:&lt;br /&gt;
&lt;br /&gt;
==== salinst ====&lt;br /&gt;
&lt;br /&gt;
=&amp;gt; implemented in vcl/aqua/source/app/salinst.cxx&lt;br /&gt;
&lt;br /&gt;
Role: &lt;br /&gt;
&lt;br /&gt;
* get environment, mutexes, instantiate AquaSalInstance (Ctor, Dtor),&lt;br /&gt;
&lt;br /&gt;
* instantiates/releases a lot of other objects using Get() / CreateObject() / DestroyObject() methods.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Current list of possible objects who can be instantiated/released:&lt;br /&gt;
&lt;br /&gt;
 * VirtualDevice [FIXME]: exact role?&lt;br /&gt;
&lt;br /&gt;
 *Printer  &lt;br /&gt;
&lt;br /&gt;
- GetDefaultPrinter/ CreatePrinter() / DestroyPrinter - what a name ;-) -&lt;br /&gt;
&lt;br /&gt;
- InfoPrinter (Get/Create/Delete)&lt;br /&gt;
&lt;br /&gt;
- PrinterQueue (DeletePrinterQueueInfo / GetPrinterQueueInfo / GetPrinterQueueState)&lt;br /&gt;
&lt;br /&gt;
 * System (Create / Delete) [FIXME]: what means system here?&lt;br /&gt;
&lt;br /&gt;
 * Events: &lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::SetEventCallback()&lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::SetErrorEvenCallback()&lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::GetConnectionIdentifier()&lt;br /&gt;
&lt;br /&gt;
 * Menu / MenuItem: &lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::CreateMenu() / same for DestroyMenu()&lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::CreateMenuItem / same DestroyMenuItem()&lt;br /&gt;
&lt;br /&gt;
 * Sound: &lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::CreateSalSound()  =&amp;gt; object to a pointer of SalSound type&lt;br /&gt;
&lt;br /&gt;
Note: AquaSalInstance::DestroySalSound is not implemented (?)&lt;br /&gt;
&lt;br /&gt;
 * Timer: CreateTimer() /&lt;br /&gt;
&lt;br /&gt;
AquaSalInstance:: DestroyTimer() is not yet implemented (?)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Class MacImeStatus: inherits of SalI18NImeStatus&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; only there to see if there is a window to toggle into menubar [FIXME]??&lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::CreateI18NImeStatus(): instantiates MacImeStatus&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;For futher informations, see: &amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;[[Content of salinst.cxx]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
([[User:Ericb|Ericb]] 16:11, 20 May 2006 (CEST) )&lt;br /&gt;
&lt;br /&gt;
==== salmain ====&lt;br /&gt;
&lt;br /&gt;
Role: if possible, runs the standard vcl application code SVMain()&lt;br /&gt;
&lt;br /&gt;
([[User:Ericb|Ericb]] 16:15, 20 May 2006 (CEST))&lt;br /&gt;
&lt;br /&gt;
==== salsound ====&lt;br /&gt;
&lt;br /&gt;
==== salsys ====&lt;br /&gt;
&lt;br /&gt;
==== saltimer ====&lt;br /&gt;
&lt;br /&gt;
==== saltimer ====&lt;br /&gt;
&lt;br /&gt;
The main problem with SalTimer is the code we use is obsolete. To remove this deprecated code, sevarl work have been tried &lt;br /&gt;
&lt;br /&gt;
1) Pavel Janik, in issue 75228 &lt;br /&gt;
&lt;br /&gt;
works, but a serious problem is remaining (a thread issue, nothing anybody explained yet) &lt;br /&gt;
&lt;br /&gt;
2) eric bacahrd ( code will be attached soon )&lt;br /&gt;
&lt;br /&gt;
3) Michael Sicotte, who proposed to work on that, and continue Pavel implementation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SalTimer description&lt;br /&gt;
&lt;br /&gt;
AquaSalTimerproc&lt;br /&gt;
&lt;br /&gt;
AquaSalTimer::Start()&lt;br /&gt;
&lt;br /&gt;
AquaSalTimer::Stop()&lt;br /&gt;
&lt;br /&gt;
AquaSalTimer::Restart()&lt;br /&gt;
&lt;br /&gt;
AquaSalTimer::Installtask()   // yet needed ?&lt;br /&gt;
&lt;br /&gt;
=== Sal GDI (everything Graphical Display Interface) ===&lt;br /&gt;
&lt;br /&gt;
====salgdinativewidgets====&lt;br /&gt;
&lt;br /&gt;
[[native controls]]&lt;br /&gt;
&lt;br /&gt;
==== salatslayout ====&lt;br /&gt;
&lt;br /&gt;
==&amp;gt; implemented in vcl/aqua/source/gdi/salatslayout.cxx&lt;br /&gt;
&lt;br /&gt;
- Handle text layouting :&lt;br /&gt;
&lt;br /&gt;
    * Use ATSUI (ATSUCreateTextLayoutFromPtr) to layout the text unicode char buffer&lt;br /&gt;
    * Use ATSUI (ATSU..) to get informations about glyphs&lt;br /&gt;
    * Populate different arrays (mpGlyph2Chars, mpChars2Glyph, mpCharsWidths, mpGlyphAdvances)&lt;br /&gt;
      that are used in various methods.&lt;br /&gt;
&lt;br /&gt;
==== salatsuiutils ====&lt;br /&gt;
&lt;br /&gt;
==== salfontutils ====&lt;br /&gt;
&lt;br /&gt;
==== salmathutils ====&lt;br /&gt;
&lt;br /&gt;
==== sal bmp ====&lt;br /&gt;
&lt;br /&gt;
==== salvd ====&lt;br /&gt;
&lt;br /&gt;
==== salpixmaputils====&lt;br /&gt;
&lt;br /&gt;
==== salprn ====&lt;br /&gt;
&lt;br /&gt;
====salrectangle====&lt;br /&gt;
&lt;br /&gt;
==== salvd ====&lt;br /&gt;
&lt;br /&gt;
=== Sal Window===&lt;br /&gt;
&lt;br /&gt;
==== salframe ====&lt;br /&gt;
Documentation in progress, from damiend :&lt;br /&gt;
[[User:Damiend|Damiend page]]&lt;br /&gt;
&lt;br /&gt;
====salobj====&lt;br /&gt;
&lt;br /&gt;
== TO BE IMPLEMENTED (missing in Aqua)==&lt;br /&gt;
&lt;br /&gt;
===Audio===&lt;br /&gt;
&lt;br /&gt;
====audioconvert====&lt;br /&gt;
 (obsolete?) &lt;br /&gt;
&lt;br /&gt;
====devaudio====&lt;br /&gt;
(obsolete?)&lt;br /&gt;
&lt;br /&gt;
====native sound====&lt;br /&gt;
&lt;br /&gt;
====salimpsound====&lt;br /&gt;
&lt;br /&gt;
====vsound====&lt;br /&gt;
&lt;br /&gt;
===i18n===&lt;br /&gt;
&lt;br /&gt;
===keysymnames===&lt;br /&gt;
&lt;br /&gt;
===saldisp===&lt;br /&gt;
&lt;br /&gt;
===sm===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[FIXME]: is session manager usefull?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Native Controls&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
====Scrollbar====&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Works as expected&amp;#039;&amp;#039;&amp;#039;. The most important work is done&lt;br /&gt;
&lt;br /&gt;
See : [[Mac_OS_X_Porting_-_Native_Controls#ScrollBar]]&lt;br /&gt;
&lt;br /&gt;
====DrawThemeButton() documentation====&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Started&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
See : [[Mac_OS_X_Porting_-_Native_Controls#ComboBox]]&lt;br /&gt;
&lt;br /&gt;
Started&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DrawThemeButton&lt;br /&gt;
Draws a button.&lt;br /&gt;
&lt;br /&gt;
OSStatus DrawThemeButton (&lt;br /&gt;
   const Rect * inBounds,&lt;br /&gt;
   ThemeButtonKind inKind,&lt;br /&gt;
   const ThemeButtonDrawInfo * inNewInfo,&lt;br /&gt;
   const ThemeButtonDrawInfo * inPrevInfo,&lt;br /&gt;
   ThemeEraseUPP inEraseProc,&lt;br /&gt;
   ThemeButtonDrawUPP inLabelProc,&lt;br /&gt;
   UInt32 inUserData&lt;br /&gt;
);&lt;br /&gt;
Parameters&lt;br /&gt;
inBounds&lt;br /&gt;
A pointer to a structure of type Rect. Pass a rectangle specifying the boundary of the button, in local coordinates.&lt;br /&gt;
&lt;br /&gt;
inKind&lt;br /&gt;
A value of type ThemeButtonKind. Pass a constant specifying the type of button to draw. &lt;br /&gt;
See “Theme Buttons” for descriptions of possible values.&lt;br /&gt;
&lt;br /&gt;
inNewInfo&lt;br /&gt;
A pointer to a structure of type ThemeButtonDrawInfo. Before calling DrawThemeButton, &lt;br /&gt;
set the structure to contain the new state, value, and adornment for the button. &lt;br /&gt;
DrawThemeButton uses the information passed in the inNewInfo and inPrevInfo parameters&lt;br /&gt;
to apply transitional animation or sound effects as the button state changes, if such are &lt;br /&gt;
specified under the current theme.&lt;br /&gt;
&lt;br /&gt;
inPrevInfo&lt;br /&gt;
A pointer to a structure of type ThemeButtonDrawInfo. If the button state is changing,&lt;br /&gt;
set the structure to contain the previous state, value, and adornment for the button, &lt;br /&gt;
to allow DrawThemeButton to apply any transitional effects. If the button state is not &lt;br /&gt;
changing, you can pass NULL.&lt;br /&gt;
&lt;br /&gt;
inEraseProc&lt;br /&gt;
A value of type ThemeEraseUPP. If you have a custom background, use this parameter to pass&lt;br /&gt;
a universal function pointer to an application-defined function such as that described in &lt;br /&gt;
ThemeEraseProcPtr. DrawThemeButton calls this function to erase the background before drawing&lt;br /&gt;
 the button. If you pass NULL, DrawThemeButton&amp;#039;s default behavior is to erase the background&lt;br /&gt;
 for you.&lt;br /&gt;
&lt;br /&gt;
inLabelProc&lt;br /&gt;
A value of type ThemeButtonDrawUPP. If you pass a universal function pointer to an &lt;br /&gt;
application-defined function such as that described in ThemeButtonDrawProcPtr, DrawThemeButton&lt;br /&gt;
 calls that function to draw the label of the button. If you pass NULL, no label is drawn.&lt;br /&gt;
&lt;br /&gt;
inUserData&lt;br /&gt;
An unsigned 32-bit integer. Provide any data to be passed in to the callback functions specified in &lt;br /&gt;
the inLabelProc and inEraseProc parameters. Pass NULL if you do not wish to provide any data.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
A result code. See “Appearance Manager Result Codes”.&lt;br /&gt;
&lt;br /&gt;
Discussion&lt;br /&gt;
The DrawThemeButton function draws a theme-compliant button. If a ThemeEraseProcPtr is &lt;br /&gt;
specified in the inEraseProc parameter, DrawThemeButton uses that function to erase the &lt;br /&gt;
background of the button before drawing the button. After the button is drawn, if a&lt;br /&gt;
ThemeButtonDrawProcPtr is specified in the inLabelProc parameter, DrawThemeButton calls&lt;br /&gt;
that function to draw the button’s label.&lt;br /&gt;
&lt;br /&gt;
Note that DrawThemeButton also draws any appearance adornments for the button and that these&lt;br /&gt;
can extend beyond the button’s basic bounding rectangle, as specified in the inBounds parameter,&lt;br /&gt;
and may be of variable shape. You may therefore wish to call the function&lt;br /&gt;
GetThemeButtonBackgroundBounds to obtain the actual rectangle containing the pixels belonging&lt;br /&gt;
to a button under the current theme.&lt;br /&gt;
&lt;br /&gt;
Version Notes&lt;br /&gt;
This function is available with Appearance Manager 1.1 and later.&lt;br /&gt;
&lt;br /&gt;
Availability&lt;br /&gt;
Available in CarbonLib 1.0 and later when Appearance 1.1 or later is present.&lt;br /&gt;
Available in Mac OS X 10.0 and later.&lt;br /&gt;
Declared In&lt;br /&gt;
Appearance.h&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====HIComboBoxCreate() documentation====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HIComboBoxCreate&lt;br /&gt;
Creates a combo box control.&lt;br /&gt;
&lt;br /&gt;
OSStatus HIComboBoxCreate (&lt;br /&gt;
   const HIRect* boundsRect,&lt;br /&gt;
   CFStringRef text,&lt;br /&gt;
   const ControlFontStyleRec* style,&lt;br /&gt;
   CFArrayRef list,&lt;br /&gt;
   OptionBits inAttributes,&lt;br /&gt;
   HIViewRef* outComboBox&lt;br /&gt;
);&lt;br /&gt;
Parameters&lt;br /&gt;
boundsRect&lt;br /&gt;
The bounding box of the control.&lt;br /&gt;
&lt;br /&gt;
text&lt;br /&gt;
The default text in the editable portion of the control. Can be NULL.&lt;br /&gt;
&lt;br /&gt;
style&lt;br /&gt;
The font style of the both editable text and the text in the disclosure list. Can be NULL.&lt;br /&gt;
&lt;br /&gt;
list&lt;br /&gt;
The default values available in the disclosure list. Can be NULL.&lt;br /&gt;
&lt;br /&gt;
inAttributes&lt;br /&gt;
The default attributes of the combo box. For possible values, see “Combo Box Attributes”.&lt;br /&gt;
&lt;br /&gt;
outComboBox&lt;br /&gt;
On exit, a pointer to a reference for the new control.&lt;br /&gt;
&lt;br /&gt;
Discussion&lt;br /&gt;
The combo box can be used in compositing mode, as well as traditional Control Manager mode.&lt;br /&gt;
When created, this view is invisible. To see the view, you must show the view by calling HIViewSetVisible.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== What is used for Linux, Windows, Mac OS X ...build ? ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[Description of the dependencies]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[Windows]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[MacOS X]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[Linux]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[Solaris]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Content of Aqua ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[Click here to see the complete list]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Content of vcl/inc&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Notes: &lt;br /&gt;
&lt;br /&gt;
1) Where to find includes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;foo/bar.hxx&amp;gt; means you can find bar.hxx in the foo module. The new style file is foo/inc/foo/bar.hxx, old style is foo/inc/bar.hxx and sometimes the file is somewhere else in the tree or generated. The deliver process copies/generates the file into solver at solver/680/build_type/inc/foo. Good for fixing broken builds. ;-)&lt;br /&gt;
&lt;br /&gt;
2) &lt;br /&gt;
suffix .h (for C calls or first version?) or .hxx (C++) &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;A) Family of includes&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
Looking more closely at the list brings to the fore (expression from dictionary ;-) ) that include names are&lt;br /&gt;
informatives. Most of the time, the name gives the function/role.&lt;br /&gt;
What is interesting is the files with name begining with &amp;quot;sal&amp;quot;. sal means System Abstraction Layer + include&amp;#039;s function (or explicit name). &lt;br /&gt;
&lt;br /&gt;
Partial list, for example:&lt;br /&gt;
&lt;br /&gt;
salatype.hxx&lt;br /&gt;
&lt;br /&gt;
salbmp.hxx&lt;br /&gt;
&lt;br /&gt;
salctrlhandle.hxx&lt;br /&gt;
&lt;br /&gt;
salctype.hxx&lt;br /&gt;
&lt;br /&gt;
salframe.hxx&lt;br /&gt;
&lt;br /&gt;
salgdi.hxx&lt;br /&gt;
&lt;br /&gt;
salgeom.hxx&lt;br /&gt;
&lt;br /&gt;
sallayout.hxx (main header for fonts services)&lt;br /&gt;
...&lt;br /&gt;
salmenu&lt;br /&gt;
salnativewidgets&lt;br /&gt;
...etc&lt;br /&gt;
&lt;br /&gt;
Other important families are &amp;quot;sv&amp;quot; and &amp;quot;uno&amp;quot; or &amp;quot;win&amp;quot; (window) prefixed. sal family will be analysed apart.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;B) Includes of includes&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Some includes are more important than other. To prove this, just have a look is sufficient: some are always needed, and some more rarely.&lt;br /&gt;
&lt;br /&gt;
To verify, a simple test to do in vcl/inc:&lt;br /&gt;
&lt;br /&gt;
egrep -H &amp;quot;#include&amp;quot; ./* | wc -l  gives me 681 lines ! And some of them are the same...&lt;br /&gt;
&lt;br /&gt;
To know more, the precedent command line can be modified to make appear the numerous call &lt;br /&gt;
to the same includes files.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
egrep -H &amp;quot;#include&amp;quot; ./* | cut -d&amp;quot;#&amp;quot; -f2 | sort &amp;gt; liste.txt&lt;br /&gt;
&lt;br /&gt;
The content of liste.txt is explicit: dllapi.h, sv.h and some other are very important, while some other includes are only one or two times used. We can see too that vos includes are numerous, even if vos is deprecated**&lt;br /&gt;
&lt;br /&gt;
 **see http://wiki.services.openoffice.org/wiki/Source_code_directories&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I&amp;#039;m nearly sure that a complete analysis of just this result will give us a lot of information.&lt;br /&gt;
&lt;br /&gt;
I propose to change the order of analysis starting with dllapi.h and sv.h.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[to be continued]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;B1) &amp;quot;sal&amp;quot; includes family&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
[[salinst.hxx]] This seems to be the main include file&lt;br /&gt;
&lt;br /&gt;
[[salatype.hxx]]&lt;br /&gt;
&lt;br /&gt;
[[salctrlhandle.hxx]]&lt;br /&gt;
&lt;br /&gt;
[[salctype.hxx]]&lt;br /&gt;
&lt;br /&gt;
[[salframe.hxx]]&lt;br /&gt;
&lt;br /&gt;
[[salgdi.hxx]]&lt;br /&gt;
&lt;br /&gt;
[[salgeom.hxx]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[ sallayout.hxx ]]&amp;#039;&amp;#039;&amp;#039; &amp;lt;-- see Native Fonts implementation&lt;br /&gt;
&lt;br /&gt;
[[salgtype.hxx]]&lt;br /&gt;
&lt;br /&gt;
[[vcl/inc/salobj.hxx]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;B2) Classicals includes&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
file: abstdlg.hxx [ means abstract dialog ]&lt;br /&gt;
&lt;br /&gt;
This includes does contain the following classes definitions:&lt;br /&gt;
&lt;br /&gt;
[FIXME] : choose a precise presentation template for classes &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
VclAbstractDialog,&lt;br /&gt;
&lt;br /&gt;
VclAbstractTerminateDialog, &lt;br /&gt;
&lt;br /&gt;
VclAbstractRefreshableDialog,&lt;br /&gt;
 &lt;br /&gt;
VclAbstractDialogFactory, &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
uses &amp;lt;tools/solar.h&amp;gt; , &amp;lt;tools/string.hxx&amp;gt; + &lt;br /&gt;
&lt;br /&gt;
&amp;quot;dllapi.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Note : dllapi.h is very interesting because when we have to find (for example) a library suffix, SAL_DLLEXTENSSION can replace all suffixes (every OS&amp;#039;s and archs). Just including sal/config.h does it ! &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Classes:&lt;br /&gt;
&lt;br /&gt;
Window -&amp;gt; what? [FIXME]&lt;br /&gt;
ResId -&amp;gt; what?&lt;br /&gt;
&lt;br /&gt;
Does contain the prototype of VclAbstractDialog, inherit of VCL_DLLPUBLIC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
file: dllapi.h [ dll for dynamic linked library ]&lt;br /&gt;
Uses: &amp;lt;sal/config.h&amp;gt; and &amp;gt;sal/types/h&amp;gt;&lt;br /&gt;
includes: VCL_DLLPUBLIC macro&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
file: accel.h [ means accelerator ]&lt;br /&gt;
&lt;br /&gt;
Classes:&lt;br /&gt;
&lt;br /&gt;
Accelerator &lt;br /&gt;
{&lt;br /&gt;
}&lt;br /&gt;
ImplAccelEntry &lt;br /&gt;
{&lt;br /&gt;
public members: &lt;br /&gt;
&lt;br /&gt;
Names&lt;br /&gt;
&lt;br /&gt;
mnId&lt;br /&gt;
maKeyCode&lt;br /&gt;
mpAccel&lt;br /&gt;
mpAutoAccel&lt;br /&gt;
mbEnabled&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function / returns / parameters&lt;br /&gt;
&lt;br /&gt;
ImplGetKeyCode / void / KeyFuncType eFunc, ref rCode1 , ref rCode2, ref rCode3&lt;br /&gt;
&lt;br /&gt;
file: accel.hxx &lt;br /&gt;
&lt;br /&gt;
Uses: &amp;lt;sv.h&amp;gt; , &amp;quot;dllapi.h&amp;quot; ,&amp;lt;tools/resid.hxx&amp;gt;, &amp;lt;&amp;lt;tools/rc.hxx&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Classes:&lt;br /&gt;
&lt;br /&gt;
ImplAccelData;&lt;br /&gt;
ImplAccelEntry;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Important Links ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[Progressive implementation]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Native Font server Implementation&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;[[Mac OS X Porting - Native Fonts]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Native Sound Implementation&amp;#039;&amp;#039;&amp;#039;: [[Mac OS X Porting - Native Audio and Video]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Native Printing Implementation&amp;#039;&amp;#039;&amp;#039;: [[Mac OS X Porting - Native_Printing]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Drag and Drop implementation&amp;#039;&amp;#039;&amp;#039;: [[Mac OS X Porting - Native Drag and drop]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Data Acquisition&amp;#039;&amp;#039;&amp;#039; : [[Mac OS X Porting - Data Acquisition]]&lt;br /&gt;
&lt;br /&gt;
This work is part of http://wiki.services.openoffice.org/wiki/Mac_OS_X_Porting_-_Work_Areas/Todo%27s&lt;br /&gt;
&lt;br /&gt;
[to be continued:-) ]&lt;br /&gt;
&lt;br /&gt;
== Keyboard comparizon between OpenOffice.org / Mac OS X  application ==&lt;br /&gt;
&lt;br /&gt;
[FIXME] redo a cleanest array &lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;vertical-align:top; text-align:centered; background-color:#F0F0F0;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#99CCFF; font-weight:bold;&amp;quot; &lt;br /&gt;
| Modifier||+ key  || Result || TextEdit  returns&lt;br /&gt;
|-&lt;br /&gt;
|ALT|| a||æ ||æ &lt;br /&gt;
|-&lt;br /&gt;
|ALT||b||ß ||ß&lt;br /&gt;
|-&lt;br /&gt;
|ALT||c||© ||©&lt;br /&gt;
|-&lt;br /&gt;
|ALT||d||∂ ||∂&lt;br /&gt;
|-&lt;br /&gt;
|ALT||e||ê ||ê&lt;br /&gt;
|-&lt;br /&gt;
|ALT||f||ƒ ||ƒ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||g ||ﬁ ||ﬁ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||h ||Ì ||Ì&lt;br /&gt;
|-&lt;br /&gt;
|ALT||i ||î ||î&lt;br /&gt;
|-&lt;br /&gt;
|ALT||j ||Ï ||Ï&lt;br /&gt;
|-&lt;br /&gt;
|ALT||k ||È ||È&lt;br /&gt;
|-&lt;br /&gt;
|ALT||l ||¬ ||¬&lt;br /&gt;
|-&lt;br /&gt;
|ALT||m ||µ ||µ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||n ||~ ||~&lt;br /&gt;
|-&lt;br /&gt;
|ALT||o ||œ ||œ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||p ||π ||π&lt;br /&gt;
|-&lt;br /&gt;
|ALT||q ||‡ ||‡&lt;br /&gt;
|-&lt;br /&gt;
|ALT||r ||® ||®&lt;br /&gt;
|-&lt;br /&gt;
|ALT||s ||Ò ||Ò&lt;br /&gt;
|-&lt;br /&gt;
|ALT||t ||† ||†&lt;br /&gt;
|-&lt;br /&gt;
|ALT||u ||º ||º&lt;br /&gt;
|-&lt;br /&gt;
|ALT||v ||◊ ||◊&lt;br /&gt;
|-&lt;br /&gt;
|ALT||w ||‹ ||‹&lt;br /&gt;
|-&lt;br /&gt;
|ALT||x ||≈ ||≈&lt;br /&gt;
|-&lt;br /&gt;
|ALT||y ||Ú ||Ú&lt;br /&gt;
|-&lt;br /&gt;
|ALT||z ||Â ||Â&lt;br /&gt;
|-&lt;br /&gt;
|ALT||A ||Æ ||Æ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||B ||∫ ||∫&lt;br /&gt;
|-&lt;br /&gt;
|ALT||C ||¢ ||¢&lt;br /&gt;
|-&lt;br /&gt;
|ALT||D||∆||∆&lt;br /&gt;
|-&lt;br /&gt;
|ALT||F ||· ||·&lt;br /&gt;
|-&lt;br /&gt;
|ALT||G ||ﬂ ||ﬂ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||H ||Î ||Î&lt;br /&gt;
|-&lt;br /&gt;
|ALT||I ||Î ||Î&lt;br /&gt;
|-&lt;br /&gt;
|ALT||J ||Í ||Í&lt;br /&gt;
|-&lt;br /&gt;
|ALT||K ||Ë ||Ë&lt;br /&gt;
|-&lt;br /&gt;
|ALT||L || &amp;lt;pre&amp;gt;|&amp;lt;/pre&amp;gt; ||&amp;lt;pre&amp;gt;|&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|ALT||M ||Ó ||Ó&lt;br /&gt;
|-&lt;br /&gt;
|ALT||N ||ı ||ı&lt;br /&gt;
|-&lt;br /&gt;
|ALT||O ||Œ ||Œ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||P ||∏ ||∏&lt;br /&gt;
|-&lt;br /&gt;
|ALT||Q ||Ω ||Ω&lt;br /&gt;
|-&lt;br /&gt;
|ALT||R ||‚ ||‚&lt;br /&gt;
|-&lt;br /&gt;
|ALT||S ||∑ ||∑&lt;br /&gt;
|-&lt;br /&gt;
|ALT||T ||™ ||™&lt;br /&gt;
|-&lt;br /&gt;
|ALT||U ||ª ||ª&lt;br /&gt;
|-&lt;br /&gt;
|ALT||V ||√ ||√&lt;br /&gt;
|-&lt;br /&gt;
|ALT||W ||› ||›&lt;br /&gt;
|-&lt;br /&gt;
|ALT||X ||⁄ ||⁄&lt;br /&gt;
|-&lt;br /&gt;
|ALT||Y ||Ÿ ||Ÿ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||Z ||Å ||Å&lt;br /&gt;
|-&lt;br /&gt;
|ALT||$ ||€ ||€&lt;br /&gt;
|-&lt;br /&gt;
|ALT||` ||@ ||@&lt;br /&gt;
|-&lt;br /&gt;
|ALT||£ ||# ||#&lt;br /&gt;
|-&lt;br /&gt;
|ALT||* ||¥ ||¥&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Sous réserve d&amp;#039;erreur ou omission [[User:Ericb|Ericb]] 00:05, 14 January 2007 (CET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[User:Ericb|Ericb]] 15:00, 22 Jul 2005 (EDT)&lt;br /&gt;
&lt;br /&gt;
[[Category:Porting]]&lt;br /&gt;
[[Category:MacOSX]]&lt;br /&gt;
[[Category:Aqua]]&lt;/div&gt;</summary>
		<author><name>Plipli</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Summer_of_Code_2007&amp;diff=29316</id>
		<title>Summer of Code 2007</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Summer_of_Code_2007&amp;diff=29316"/>
		<updated>2007-03-29T08:11:07Z</updated>

		<summary type="html">&lt;p&gt;Plipli: /* Mac OS X Address book integration (Aqua / X11) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Similar to [[SummerOfCode2006|last year]], OpenOffice.org is participating in the [http://code.google.com/soc/ Google Summer of Code](tm) initiative sponsored by Google.&lt;br /&gt;
&lt;br /&gt;
This page collects some suitable task suggestions we got many applications for. We would be glad to support a few projects. The review is in progress and results can be expected for&lt;br /&gt;
[http://code.google.com/support/bin/answer.py?answer=60325&amp;amp;topic=10729 April 11].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Task Proposals=&lt;br /&gt;
&lt;br /&gt;
==API==&lt;br /&gt;
&lt;br /&gt;
===UNO specifications changes in Eclipse Integration===&lt;br /&gt;
&lt;br /&gt;
This project aims at improving the way to develop OpenOffice.org extensions and UNO components using Eclipse. This project should help the developer to changes its specifications easily. This project could be parted into several smaller parts.&lt;br /&gt;
&lt;br /&gt;
See [[EclipseIntegration_ToDo#IDL_files_modification_assistance | the Todo task description]] for further informations.&lt;br /&gt;
&lt;br /&gt;
* Required skills/knowledge: Java, Grammar &amp;amp; Compilers&lt;br /&gt;
* Usefull skills: Eclipse API, JavaCC, UNO &amp;amp; UNO IDL&lt;br /&gt;
&lt;br /&gt;
; Contact&lt;br /&gt;
: dev@api.openoffice.org&lt;br /&gt;
: CedricBosdo at openoffice.org&lt;br /&gt;
&lt;br /&gt;
== Base ==&lt;br /&gt;
&lt;br /&gt;
=== Joins in dBase Queries ===&lt;br /&gt;
&lt;br /&gt;
Queries to dBase files can currently contain one table only. Scope of the project is to enhance Base&amp;#039; built-in simple query engine to be capable of executing statements line &amp;lt;code&amp;gt;SELECT table1.field1, table2.field2 FROM table1, table2&amp;lt;/code&amp;gt;. The dBase driver, the text/csv driver, and the Spreadsheet driver would all benefit from this extension.&lt;br /&gt;
&lt;br /&gt;
Be prepared to dig around here before starting the project, the project touches low-level core implementations, including some heavy-to-read STL stuff, so be prepared to invest some time before writing the first line of code.&lt;br /&gt;
&lt;br /&gt;
* required skills C++, SQL knowledge&lt;br /&gt;
* useful skills: Lexx and Yacc&lt;br /&gt;
* Contact: mailto:dev@dba.openoffice.org&lt;br /&gt;
* Mentor: Ocke Janssen - Ocke.Janssen at Sun.Com&lt;br /&gt;
&lt;br /&gt;
=== Dialogs with Form Functionality ===&lt;br /&gt;
&lt;br /&gt;
When creating a form, the user always needs to bother with a Writer document. Very often, this is much too oversized. It would be sufficient to have a simple dialog which contains all the data access controls.&lt;br /&gt;
&lt;br /&gt;
The advantage would be to not slay the user with things she does not bother – a writer document offers a lot of possibilities which are not relevant for a form. In some cases, a full writer document does even contradict to what users expect from a form – one thing to mention here is that documents are always freely sizable, which is nothing you expect from a carefully designed form, where controls are placed at concrete positions and have a fixed size.&lt;br /&gt;
&lt;br /&gt;
The project is to&lt;br /&gt;
- extend the dialog runtime engine to (optionally) include data-aware form controls&lt;br /&gt;
- create a form designer for dialog-based forms (similar to the existing Basic Dialog IDE)&lt;br /&gt;
- implement persistence of dialog-based forms&lt;br /&gt;
- embed dialog-based forms into database documents (.odb)&lt;br /&gt;
&lt;br /&gt;
Depending on more fine-grained planning, it might become apparent that not all of this can be done in the scope of a Google Summer of Code project, and reasonable milestones need to be defined.&lt;br /&gt;
&lt;br /&gt;
* required skills C++, UNO&lt;br /&gt;
* useful skills: familiarity with OOo&amp;#039;s database access and form API, as well as OOo&amp;#039;s [http://api.openoffice.org/docs/common/ref/com/sun/star/awt/module-ix.html toolkit API]&lt;br /&gt;
* Contact: mailto:dev@dba.openoffice.org&lt;br /&gt;
* Mentor: Frank Schönheit - Frank.Schoenheit at Sun.Com&lt;br /&gt;
&lt;br /&gt;
=== Embed Derby into OpenOffice.org Databases ===&lt;br /&gt;
&lt;br /&gt;
OpenOffice.org Base features an abstract mechanism to embed database backend files into OOo databases (.odb). Currently, this is implemented for [http:///hsqldb.org HSQLDB], which is used as OOo&amp;#039;s default database engine.&lt;br /&gt;
&lt;br /&gt;
To allow this feature for other engines, one must:&lt;br /&gt;
&lt;br /&gt;
* virtualize the engine&amp;#039;s file access, so that it re-routes all its file operations through an abstract API.&lt;br /&gt;
* implement this API on the OOo Base side &lt;br /&gt;
&lt;br /&gt;
The project is to do those implementations for [http://db.apache.org/derby Apache Derby database].&lt;br /&gt;
&lt;br /&gt;
* required skills Java, C++&lt;br /&gt;
* useful skills: OOo&amp;#039;s database access API, OOo&amp;#039;s component technology (UNO)&lt;br /&gt;
* Contact: mailto:dev@dba.openoffice.org&lt;br /&gt;
* Mentor: Ocke Janssen - Ocke.Janssen at Sun.Com&lt;br /&gt;
&lt;br /&gt;
==Calc==&lt;br /&gt;
&lt;br /&gt;
===Integration of R into Calc===&lt;br /&gt;
&lt;br /&gt;
Create an add-on component that allows a Calc user to let the [http://www.r-project.org/ R environment] do calculations on data from Calc cells and put the results into the spreadsheet again.&lt;br /&gt;
&lt;br /&gt;
This should include a dialog to select input parameters and options, and allow results to be values or graph images. Note that the incompatible licenses (R is under GPL) have to be taken care of, possibly by starting R as a separate process.&lt;br /&gt;
&lt;br /&gt;
Some more thoughts on the subject have been collected at [[Statistical Data Analysis Tool#Third Party Library Integration]].&lt;br /&gt;
&lt;br /&gt;
* Required skills/knowledge: Some familiarity with statistical methods&lt;br /&gt;
&lt;br /&gt;
; Contact&lt;br /&gt;
: dev@sc.openoffice.org&lt;br /&gt;
: Niklas.Nebel at sun.com&lt;br /&gt;
&lt;br /&gt;
: Leonard Mada&lt;br /&gt;
: (on statistics and R syntax)&lt;br /&gt;
: discoleo at openoffice.org&lt;br /&gt;
&lt;br /&gt;
===Watch Window===&lt;br /&gt;
&lt;br /&gt;
A Watch Window is a separate, small window that remains &amp;quot;on top&amp;quot; and enables users to monitor a selected set of cells, see [http://www.openoffice.org/issues/show_bug.cgi?id=28386 issue 28386].&lt;br /&gt;
&lt;br /&gt;
This could be implemented as an add-on component with a modeless dialog containing the list of watched cells as well as the UI to add or remove cells.&lt;br /&gt;
&lt;br /&gt;
* Required skills/knowledge: Java or C++&lt;br /&gt;
&lt;br /&gt;
; Contact&lt;br /&gt;
: dev@sc.openoffice.org&lt;br /&gt;
: Niklas.Nebel at sun.com&lt;br /&gt;
&lt;br /&gt;
===Non-Linear Optimizer Development for Optimization Solver===&lt;br /&gt;
This task involves developing a new optimizer to solve general constrait non-linear model for the [[Optimization Solver]] component.  There is now an independent optimizer testing &amp;amp; development framework for non-linear optimizer, so the applicant would not need to understand the entire OO.o code base.&lt;br /&gt;
&lt;br /&gt;
Note that the code for [[Optimization Solver]] is still in the process of upstreaming, so the applicant would be working on a specific branch that contains the [[scsolver]] module.&lt;br /&gt;
&lt;br /&gt;
* Required skills/knowledge: C++, some familiarity with operations research&lt;br /&gt;
&lt;br /&gt;
; Contact&lt;br /&gt;
: dev@sc.openoffice.org&lt;br /&gt;
: kyoshida at novell dot com&lt;br /&gt;
: jody at novell dot com&lt;br /&gt;
&lt;br /&gt;
===Unit Testing Framework for Optimization Solver===&lt;br /&gt;
&lt;br /&gt;
The [[Optimization Solver]] component needs a unit-testing framework for its linear optimizer.  This task would involve collecting a load of test cases (small and large) with known solutions, and write an automated unit-testing program for the linear portion of the optimizer code.&lt;br /&gt;
&lt;br /&gt;
* Required skills/knowledge: C++&lt;br /&gt;
&lt;br /&gt;
; Contact&lt;br /&gt;
: dev@sc.openoffice.org&lt;br /&gt;
: kyoshida at novell dot com&lt;br /&gt;
: jody at novell dot com&lt;br /&gt;
&lt;br /&gt;
===Additional AutoFilter Functionality===&lt;br /&gt;
&lt;br /&gt;
Add core and user interface support for additional forms of filtering&lt;br /&gt;
* Date based filters (eg current year/quarter)&lt;br /&gt;
* Multiple items without falling back on logical OR.&lt;br /&gt;
* Statistical filters (eg within N stddev of mean)&lt;br /&gt;
&lt;br /&gt;
* Required skills/knowledge: C++, Familiarity with OOo frameworks.&lt;br /&gt;
&lt;br /&gt;
; Contact&lt;br /&gt;
: mailto:dev@sc.openoffice.org&lt;br /&gt;
: jody at novell dot com&lt;br /&gt;
&lt;br /&gt;
===Move Older Spreadsheet formats into an UNO Component===&lt;br /&gt;
&lt;br /&gt;
Support for several formats still lives in the core calc module, and bloat it with little used functionality.&lt;br /&gt;
Moving the antiquated filters into a distinct component would be good introduction to UNO and the spreadsheet code.&lt;br /&gt;
If time permits the new component could have support for other simple spreadsheet formats, such as Applix.&lt;br /&gt;
&lt;br /&gt;
* Required skills/knowledge: C++, Familiarity with OOo frameworks.&lt;br /&gt;
&lt;br /&gt;
; Contact&lt;br /&gt;
: mailto:dev@sc.openoffice.org&lt;br /&gt;
: jody at novell dot com&lt;br /&gt;
&lt;br /&gt;
==Extensions==&lt;br /&gt;
&lt;br /&gt;
===OOo connector for External IDE for OOo scripting languages===&lt;br /&gt;
&lt;br /&gt;
This project will solve the problem of lack of IDE for scripting languages in OOo. Scripts can be seen as macros in various languages and are complementary to Extensions.&lt;br /&gt;
Actually, only OOoBasic has its IDE embedded in OOo. Javascript and Beanshell have limited ones and python nothing. To avoid implementing different IDE for various languages into OOo, the proposed choice is to provide a connector to any external IDE&lt;br /&gt;
&lt;br /&gt;
The project is dived into 2 complementary parts :&lt;br /&gt;
* defining and implementing common tools at OOo side to put the scipts at the correct place and manage OOo scripts menus &lt;br /&gt;
* implement an  Eclipse extension as an IDE that could handle scripts in python language, using the previously defined OOo tools.&lt;br /&gt;
&lt;br /&gt;
; Requirements&lt;br /&gt;
* Required skills/knowledge: java, python, UNO &lt;br /&gt;
* Usefull skills: Eclipse API, OOo API, IDE general knowledge&lt;br /&gt;
&lt;br /&gt;
; Contact&lt;br /&gt;
: dev@extensions.openoffice.org&lt;br /&gt;
: LaurentGodard@openoffice.org&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===OOo connector that allows users to interact with the main applications of the Suite in their cellphones===&lt;br /&gt;
&lt;br /&gt;
Development of a Open Office plugin that makes possible inquiring for bluetooth devices in the area and then send, via OBEX protocol, a MIDP 2.0 java mobile application to a choosed device between the ones that have been found previously. In addition the plugin can start a bluetooth server that will listen for received messages, where this server will have an unique identifier, which is the same that was inserted in the sent mobile application.&lt;br /&gt;
&lt;br /&gt;
This mobile JME application will allow user to navigate thought the system directories and the files available in a directory will be filtered by OO files. If the user selects one of the available OO files in the folder, the associated OO application will be opened at the target computer and the mobile application will show an device adapted interface, making this user able to interact with the Open Office applications at that computer: In Impress will be possible to control slide presentation in a slideshow, while a preview of the page is being shown at the device screen; In Calc will be possible to edit rows and columns and so create new spreadsheets; For Writer will be possible to read documents, edit and create new ones.&lt;br /&gt;
&lt;br /&gt;
; Requirements&lt;br /&gt;
* Required skills/knowledge: XML, JSE, JME, UNO Api&lt;br /&gt;
* Usefull skills: Bluetooth Stack Protocol, BlueZ&lt;br /&gt;
&lt;br /&gt;
; Contact&lt;br /&gt;
: brunogh at gmail.com&lt;br /&gt;
: lucastorri at gmail.com&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Easy Language/Linguistics Switcher ===&lt;br /&gt;
&lt;br /&gt;
In countries like India where each person know about 2/3 Indian languages and uses 2/3 scripts when s/he creates documents, easy access to language settings become very necessary. This project aims to provide an intuitive interface to control the install linguitic components for a particular language. Secondly input method control from inside the OpenOffice could also be incorporated. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Required skills/knowledge: C++/Java&lt;br /&gt;
* Useful skills: Basic UNO API knowledge&lt;br /&gt;
&lt;br /&gt;
; Contact&lt;br /&gt;
: RKVS Raman (rkvsraman@openoffice.org )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Framework==&lt;br /&gt;
&lt;br /&gt;
===Shell Extensions for Desktop file search and showing meta data in windows explorer needs to be rewritten for Vista===&lt;br /&gt;
&lt;br /&gt;
Vista changed his mechanism to integrate those shell extensions incompatible. Extensions valid for Win98/2000/XP doesnt work any more. A set of new interfaces was designed. But they are available on Vista only. So OOo has to support two sets of shell extensions: one set for Win98/2000/XP and a new set for Vista and might following windows versions. For this project the new Vista extensions has to be implemented only.&lt;br /&gt;
See [http://www.openoffice.org/issues/show_bug.cgi?id=71112 71112] and [http://www.openoffice.org/issues/show_bug.cgi?id=70944 70944] for further informations.&lt;br /&gt;
&lt;br /&gt;
* Required skills/knowledge: C++&lt;br /&gt;
* Useful skills: Windows API knowledge&lt;br /&gt;
* Requirements: Windows Vista 32 Bit&lt;br /&gt;
&lt;br /&gt;
; Contact&lt;br /&gt;
: dev@framework.openoffice.org, Andreas.Schluens at sun.com&lt;br /&gt;
&lt;br /&gt;
===Status bar control to display/change the language===&lt;br /&gt;
&lt;br /&gt;
Currently the Writer lacks means to display the language in use. There&amp;#039;s also no easy way to change the language as the user has to use the menu. A status bar control would help to solve these problems.  It should help to determine about the language used at the cursor position or the document. The control should be implemented using existing UNO APIs.&lt;br /&gt;
&lt;br /&gt;
* Required skills/knowledge: C++&lt;br /&gt;
* Useful skills: Basic UNO API knowledge&lt;br /&gt;
&lt;br /&gt;
; Contact&lt;br /&gt;
: dev@framework.openoffice.org, Carsten.Driesner at sun.com&lt;br /&gt;
: dev@sw.openoffice.org, Thomas.Lange at sun.com&lt;br /&gt;
&lt;br /&gt;
===Improving UI editing / coupling===&lt;br /&gt;
&lt;br /&gt;
Currently all dialogs (along with most translated strings) are stored in a rather unusual binary resource file format, that has not had much love in the last decade. We need to write some new code that separates the process of designing &amp;amp;amp; laying out the UI from the code - to allow UE to make our UI more beautiful, and allow future re-factoring. The existing Basic GUI dialog editor and it&amp;#039;s XML format should be re-used, a simple C++ compatibility API created, and a number of dialogs converted to the new format.&lt;br /&gt;
&lt;br /&gt;
* Required skills/knowledge: C++&lt;br /&gt;
* Useful skills: courage, stickability, X-rated code reading&lt;br /&gt;
&lt;br /&gt;
; Contact&lt;br /&gt;
: michael.meeks at novell.com&lt;br /&gt;
: hfiguiere at novell.com&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== OpenOffice.org Based Workflow Framework ===&lt;br /&gt;
&lt;br /&gt;
The one feature that is now begging for attention from OpneOffice.org is the colloboration and workflow. The workflow system should leverage on the Xforms support in OpenOffice.org and combine it with other Open Source Products like Shark ( http://www.enhydra.org/workflow/shark/index.html ) and  JaWe ( http://www.enhydra.org/workflow/jawe/index.html ) to create an integrated Xforms based workflow system. The product should have a centralized server component and a client component. The server component interfaces with Process repositories and Process Instance repositories and has  Java based Administration and Definition tools. The client component could be a toolbar which sits  as an addon into the office suite. &lt;br /&gt;
The goal of this project is to provide document workflow from within OpenOffice.org.&lt;br /&gt;
&lt;br /&gt;
; Tasks&lt;br /&gt;
* Make a prototype of docment workflow.&lt;br /&gt;
&lt;br /&gt;
; Required skills/knowledge:&lt;br /&gt;
* Java/J2EE&lt;br /&gt;
* C/C++&lt;br /&gt;
* knowledge of XForms Document Model&lt;br /&gt;
&lt;br /&gt;
; Contact&lt;br /&gt;
: RKVS Raman (rkvsraman@openoffice.org)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Graphics==&lt;br /&gt;
&lt;br /&gt;
===Draw/Impress: SVG Import Filter===&lt;br /&gt;
&lt;br /&gt;
[http://www.w3.org/Graphics/SVG/ SVG (Scalable Vector Graphics)] is a vector graphics format that describes 2D graphics in XML.&lt;br /&gt;
&lt;br /&gt;
There&amp;#039;s no native SVG import filter for OOo. There exists an [http://www.ipd.uka.de/~hauma/svg-import/ external one], but unfortunately it has very strong dependencies - [http://java.sun.com/javase/downloads/index.jsp Java 5.0], and [http://xmlgraphics.apache.org/batik/ Batik].  The goal of this task is to create a new implementation that does not require any too big libraries.&lt;br /&gt;
&lt;br /&gt;
A proof of concept implementation written in C++ using the [http://wiki.services.openoffice.org/wiki/Uno UNO] [http://api.openoffice.org/docs/common/ref/com/sun/star/drawing/module-ix.html Drawing API] and a lighweight [http://cairographics.org/libsvg libsvg library] exists [http://svn.gnome.org/viewcvs/ooo-build/trunk/patches/src680/svg-import.diff here], but it needs a lot of work to be really usable.  Another problem is that libsvg does not seem to be too actively maintained; so the real implementation should use OOo&amp;#039;s [http://wiki.services.openoffice.org/wiki/FastParser internal XML parser].&lt;br /&gt;
&lt;br /&gt;
More information is available in [http://artax.karlin.mff.cuni.cz/~kendy/blog/archives/monthly/2006-10.html#2006-10-02T17_14_44.htm Kendy&amp;#039;s blog].&lt;br /&gt;
&lt;br /&gt;
* Required skills/knowledge: C++, XML knowledge is a plus&lt;br /&gt;
&lt;br /&gt;
; Contact&lt;br /&gt;
: Jan Holesovsky - kendy at openoffice org&lt;br /&gt;
: Fridrich Strba - fridrich_strba at openoffice org&lt;br /&gt;
&lt;br /&gt;
===Impress: OpenGL rendered transitions===&lt;br /&gt;
The goal is to add 3D transitions to the Impress application. Transition is an animation where one page is visible in the beginning and another in the end. It is used during presentation slideshow to switch pages.&lt;br /&gt;
&lt;br /&gt;
In the process of implementing OpenGL transitions an UNO API should be added to slideshow code, so that OpenGL transitions engine might be created as standalone UNO component. Current transitions should be refactored to another UNO component.&lt;br /&gt;
&lt;br /&gt;
The engine will get the previous and next pages and should render the transition at given speed.&lt;br /&gt;
&lt;br /&gt;
The participant should also implement at least 5 OpenGL transitions, rendered by the UNO component.&lt;br /&gt;
&lt;br /&gt;
* Reguired skills/knowledge: C++, OpenGL. familiarity with UNO is welcomed&lt;br /&gt;
&lt;br /&gt;
;Contact:&lt;br /&gt;
:mailto:dev@graphics.openoffice.org&lt;br /&gt;
:Thorsten Behrens - thb at openoffice org&lt;br /&gt;
:Radek Doulik - radekdoulik at openoffice org&lt;br /&gt;
&lt;br /&gt;
===Impress: Import Apple Keynote presentations===&lt;br /&gt;
Write an importer to import XML based Apple Keynote presentation files.&lt;br /&gt;
&lt;br /&gt;
An incomplete format documentation is [http://developer.apple.com/documentation/AppleApplications/Conceptual/iWork2-0_XML/Chapter02/chapter_2_section_1.html#//apple_ref/doc/uid/TP40002479-CH203-DontLinkElementID_65 available on ADC], therefore reverse engineering will be needed. Since the file format change accross the various versions, [http://developer.apple.com/appleapplications/keynote-apxl.html version 1.0] can also be opted.&lt;br /&gt;
&lt;br /&gt;
* Required skills: C++. Familiarity with UNO is welcome.&lt;br /&gt;
&lt;br /&gt;
;Contact:&lt;br /&gt;
:mailto:dev@graphics.openoffice.org&lt;br /&gt;
:Hubert Figuiere - hub AT openoffice org&lt;br /&gt;
&lt;br /&gt;
==ODF Toolkit==&lt;br /&gt;
&lt;br /&gt;
=== Tools and best practice samples for ODF creation and manipulation===&lt;br /&gt;
&lt;br /&gt;
We already have some code snippets in Java and C# and looking for help to extend these tool sets or to provide tool sets in other languages. These tool sets are designed to offer basic ODF functionality even outside of OO.o.&lt;br /&gt;
&lt;br /&gt;
* Required skills/knowledge: Java or C# or Perl or C++ ...&lt;br /&gt;
* Useful skills: ODF, XML&lt;br /&gt;
&lt;br /&gt;
; Contact&lt;br /&gt;
: dev@odftoolkit.openoffice.org, &lt;br /&gt;
: Dieter Loeschky at sun.com&lt;br /&gt;
&lt;br /&gt;
== Porting: Mac OS X native port ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039;Complete User Interface respecting Aqua Human Interface Guidelines (Aqua Only)&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
&lt;br /&gt;
*Concerns: OpenOffice.org 2.x for Mac OS X Aqua only&lt;br /&gt;
&lt;br /&gt;
*Skills: Knowledge of languages C/C++ Mac OS X APIs and Application frameworks like Carbon&lt;br /&gt;
&lt;br /&gt;
Original OpenOffice.org vcl widgets are not Aqua HIG compliant, and we need to implement all controls, respecting Aqua Human Interface Guidelines, some will use HIView, or HITheme or even other part of Carbon API.&lt;br /&gt;
&lt;br /&gt;
*Tasks:  some controls are already implemented, but some are still missing.&lt;br /&gt;
&lt;br /&gt;
The job consists in write the code and implement: &lt;br /&gt;
&lt;br /&gt;
- tabs (implement and bind the TabitemValue class, using Carbon API)&lt;br /&gt;
&lt;br /&gt;
- spinbuttons (implement and bind  SpinbuttonValue class, using Carbon API)&lt;br /&gt;
&lt;br /&gt;
- comboboxes (implement and use HICombobox)&lt;br /&gt;
&lt;br /&gt;
- listboxes (work already started)&lt;br /&gt;
&lt;br /&gt;
- texts in comboboxes / listboxes  (better task definition to be completed)&lt;br /&gt;
&lt;br /&gt;
- other types of controls:  highlight, respect dimensions/spacing ..etc&lt;br /&gt;
&lt;br /&gt;
- Windows background (using Aqua theme)  &lt;br /&gt;
&lt;br /&gt;
;Proposed by: Eric Bachard &lt;br /&gt;
;Contact:  mac@porting.openoffice.org &lt;br /&gt;
;Mentor:  Eric Bachard ( ericb at openoffice dot org )&lt;br /&gt;
&lt;br /&gt;
=== Mac OS X native printing (Aqua only) ===&lt;br /&gt;
&lt;br /&gt;
Concerns: OpenOffice.org 2.x for Mac OS X Aqua only&lt;br /&gt;
&lt;br /&gt;
Objective: currently, the native printing implementation is missing on Aqua port and needs to be implemented.&lt;br /&gt;
&lt;br /&gt;
The objective is to use the same box users have in any Mac application.&lt;br /&gt;
&lt;br /&gt;
Skills: Knowledge of languages C/C++ Mac OS X APIs and Application frameworks like Carbon and /or Cocoa&lt;br /&gt;
&lt;br /&gt;
Tasks:  &lt;br /&gt;
&lt;br /&gt;
Familiarize with the Mac OS X printing APIs&lt;br /&gt;
&lt;br /&gt;
Familiarize with the current OOo printing API&lt;br /&gt;
&lt;br /&gt;
Expected: Write code to Implement native printing with Aqua version of OpenOffice.org: &lt;br /&gt;
&lt;br /&gt;
; Contact&lt;br /&gt;
: mac@porting.openoffice.org&lt;br /&gt;
: fheckl at openoffice dot org &lt;br /&gt;
&lt;br /&gt;
;Proposed by:  Florian Heckl &lt;br /&gt;
&lt;br /&gt;
;Mentor:  Florian Heckl&lt;br /&gt;
&lt;br /&gt;
=== Mac OS X Address book integration (Aqua / X11) ===&lt;br /&gt;
&lt;br /&gt;
Synopsis: OOo currently is integrated with the Mozilla address book but not with the native Mac OS X address book. This is annoying for Mac OS X user. For better system integration it would be desirable to integrate with the Mac OS X address book.&lt;br /&gt;
&lt;br /&gt;
Concerns: OpenOffice.org 2.x for Mac OS X (both Aqua and X11 versions)&lt;br /&gt;
&lt;br /&gt;
;Skills: Knowledge of languages C/C++, Mac OS X APIs and Application frameworks like Carbon or Cocoa for instance, knowledge of the Mac OS X address book APIs&lt;br /&gt;
&lt;br /&gt;
;Tasks: &lt;br /&gt;
&lt;br /&gt;
Familiarize with the Mac OS X address book APIs &lt;br /&gt;
&lt;br /&gt;
Familiarize with the current OOo Mozilla address book integration &lt;br /&gt;
&lt;br /&gt;
Make a prototype for OOo Mac OS X address book integration&lt;br /&gt;
&lt;br /&gt;
Document all produced code and aspects, Extend the principles to support docuemnt (text/media) Drag&amp;#039;n Drop.&lt;br /&gt;
&lt;br /&gt;
;Contact&lt;br /&gt;
mac@porting.openoffice.org&lt;br /&gt;
&lt;br /&gt;
;Mentor:  Sebastien Plisson&lt;br /&gt;
&lt;br /&gt;
==VBA==&lt;br /&gt;
&lt;br /&gt;
===Word macro compatibility===&lt;br /&gt;
&lt;br /&gt;
Recently Sun and Novell announced to pool resources to provide VBA macro compatability see  [http://blogs.sun.com/GullFOSS/entry/sun_and_novell_work_together here]. &lt;br /&gt;
&lt;br /&gt;
Currently work in the project is concentrated on providing Excel support by &lt;br /&gt;
* providing the framework for the compatibiltiy api via a plugable component&lt;br /&gt;
* modifying the basic engine to support more compatibility features&lt;br /&gt;
* porting the [http://wiki.services.openoffice.org/wiki/Helperapi helperapi] code (for excel) to c++ (see. [http://wiki.services.openoffice.org/wiki/VBA here] &amp;amp; [http://wiki.services.openoffice.org/wiki/Porting_notes here])&lt;br /&gt;
&lt;br /&gt;
Tasks&lt;br /&gt;
 &lt;br /&gt;
* extend the base framework by developing helper objects and implementations to be used by both the excel and writer compatibility object implementations&lt;br /&gt;
* port the existing (word) helper api objects from Java to C++ &lt;br /&gt;
&lt;br /&gt;
Required skills/knowledge &lt;br /&gt;
&lt;br /&gt;
* C++&lt;br /&gt;
* Java&lt;br /&gt;
useful skills: &lt;br /&gt;
&lt;br /&gt;
* knowledge of OOo&amp;#039;s writer access API&lt;br /&gt;
* knowledge of OOo&amp;#039;s component technology (UNO)&lt;br /&gt;
* experience with VBA macros and Word VBA api &lt;br /&gt;
 &lt;br /&gt;
Mentor/Contact &lt;br /&gt;
* noel.power at novell dot com&lt;br /&gt;
&lt;br /&gt;
== Writer ==&lt;br /&gt;
&lt;br /&gt;
===Writer: Better &amp;quot;Notes&amp;quot; functionality===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Notes&amp;quot; functionality in Writer could be better in terms of usability and does not look very appealing. &lt;br /&gt;
&lt;br /&gt;
* Required skills/knowledge: C++&lt;br /&gt;
&lt;br /&gt;
; Contact&lt;br /&gt;
: dev@sw.openoffice.org&lt;br /&gt;
: Mathias.Bauer at sun.com&lt;br /&gt;
&lt;br /&gt;
; Resources&lt;br /&gt;
[http://blogs.linux.ie/caolan/2007/03/12/notesmarginnotes-in-sw/ hopefully helpful illustrative patch]&lt;br /&gt;
&lt;br /&gt;
===MS Works Import Filter===&lt;br /&gt;
&lt;br /&gt;
Unlike its proprietary derivatives, OpenOffice.org lacks MS Works import filter. The creation of MS Works import filter is one of functionalities requested by our users. There is a basic import filter work started and the result is to be found in CWS wpsimport01. This filter, based on recently started libwps[http://libwps.sourceforge.net] library is offering only limited number of features converted. It is desirable to build on this work and improve this library/filter so that the quality meets industry standards.&lt;br /&gt;
&lt;br /&gt;
* Required skills/knowledge: C++, solid knowledge of MS Works wordprocessing document file-format and of libwps library.&lt;br /&gt;
&lt;br /&gt;
; Contact&lt;br /&gt;
: mailto:dev@sw.openoffice.org&lt;br /&gt;
: fridrich_strba at openoffice.org&lt;br /&gt;
: freuter at novell.com&lt;br /&gt;
&lt;br /&gt;
===RTF Generator===&lt;br /&gt;
&lt;br /&gt;
The current RTF export of OpenOffice.org is not as good as the export to the Word (.doc) format. Parsing the generated Word format stream with a Word tokenizer and handing over the generated events to an RTF generator would lead to an RTF export filter with the same quality as the binary Word export filter. Remark: the tokenizer itself isn&amp;#039;t complete today but in its current state covers enough parts of the Word format to make this a valuable project for the planned time span.&lt;br /&gt;
&lt;br /&gt;
* Required skills/knowledge: C++, some knowledge about the Word file format would be a plus&lt;br /&gt;
&lt;br /&gt;
; Contact&lt;br /&gt;
: dev@sw.openoffice.org&lt;br /&gt;
: Henning.Brinkmann at sun.com&lt;br /&gt;
&lt;br /&gt;
=== Logging framework ===&lt;br /&gt;
&lt;br /&gt;
During the import/export process from alien file formats there might be some features which can not be mapped entirely.&lt;br /&gt;
The goal of this project is to provide a loggin framework for the new domainmapper of the writer filter project, which&lt;br /&gt;
allow the domainmapper to notify the user of such mapping problems.&lt;br /&gt;
&lt;br /&gt;
* Required skills/knowledge: C++&lt;br /&gt;
&lt;br /&gt;
; Contact&lt;br /&gt;
: mailto:dev@sw.openoffice.org&lt;br /&gt;
: Florian Reuter (freuter at novell.com)&lt;br /&gt;
: Fridrich Strba (fridrich_strba at openoffice org)&lt;br /&gt;
&lt;br /&gt;
=== UOF import filter ===&lt;br /&gt;
&lt;br /&gt;
Specification for the Chinese office file format based on XML (UOF for short) is a National Standard of the People’s Republic of China.  The open source project &amp;quot; ODF‑UOF Converter&amp;quot; hosted by Peking University have been finished in October, 2006. More information is available in http://odf-to-uof.sourceforge.net/index.html.&lt;br /&gt;
&lt;br /&gt;
The goal of this project is to provide interoperability with UOF documents.&lt;br /&gt;
&lt;br /&gt;
; Tasks&lt;br /&gt;
* Make a prototype of UOF import filter for OOo.&lt;br /&gt;
&lt;br /&gt;
; Required skills/knowledge:&lt;br /&gt;
* C++&lt;br /&gt;
* knowledge of ODF, UOF&lt;br /&gt;
* knowledge of OOo&amp;#039;s xml filter&lt;br /&gt;
&lt;br /&gt;
; Contact&lt;br /&gt;
: mailto:dev@sw.openoffice.org&lt;br /&gt;
: Fong Lin (pflin@novell.com)&lt;br /&gt;
: Jian Hua (jjiao@novell.com)&lt;br /&gt;
&lt;br /&gt;
=New Tasks=&lt;br /&gt;
&lt;br /&gt;
If you have a task that is challenging enough, and there is an OpenOffice.org Project Member willing to mentor the task, feel free to coordinate with the appropriate project lead. If the appropriate project has been found and it supports the task, add it below and make sure the mentor applies with the web app.&lt;br /&gt;
&lt;br /&gt;
Each entry should contain the task description, required skills, project mailing list for discussion and personal contact.  Links to the [[To-Dos]] are appreciated provided that the task is well described there ;-)&lt;br /&gt;
&lt;br /&gt;
 ===Example entry===&lt;br /&gt;
 &lt;br /&gt;
 This is just an example - the real entry must not start with a space at the beginning&lt;br /&gt;
 of the line.&lt;br /&gt;
 A full description of the task should be here; one that will help to see that this task&lt;br /&gt;
 is important,  and interesting to hack on.  Alternatively it could be an exact link to&lt;br /&gt;
 the description that is already in [[To-Dos]].&lt;br /&gt;
 &lt;br /&gt;
 * Required skills/knowledge: Language, technology1, technology2, ...&lt;br /&gt;
 &lt;br /&gt;
 ; Contact&lt;br /&gt;
 : dev@project.openoffice.org&lt;br /&gt;
 : The.Mentor at organization com&lt;br /&gt;
&lt;br /&gt;
=Advise for Student Applications=&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;The application period is over.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Mentoring capacities are limited, so we depend on your dedication during the preparation of the detailed specification and description of the outcome.&lt;br /&gt;
 &lt;br /&gt;
Please review the [http://code.google.com/support/bin/topic.py?topic=10442 FAQ]&lt;br /&gt;
and the&lt;br /&gt;
[http://groups.google.com/group/google-summer-of-code-announce/web/guide-to-the-gsoc-web-app-for-student-applicants guide to the web app]. Be sure to take the [http://code.google.com/p/google-summer-of-code/wiki/AdviceforStudents advice for students] seriously.&lt;br /&gt;
Don&amp;#039;t hesitate to raise questions about tasks on the project mailing list mentioned in the task description before you send your application. We are glad to receive many qualified submissions touching on the information mentioned in the [http://code.google.com/support/bin/answer.py?answer=60306&amp;amp;topic=10727 knowledge base].&lt;br /&gt;
&lt;br /&gt;
And then - &amp;#039;&amp;#039;&amp;#039;[http://code.google.com/soc/student_step1.html apply]&amp;#039;&amp;#039;&amp;#039; for an OpenOffice.org task.&lt;br /&gt;
&lt;br /&gt;
Thanks and Good luck!&lt;/div&gt;</summary>
		<author><name>Plipli</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Summer_of_Code_2007&amp;diff=29297</id>
		<title>Summer of Code 2007</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Summer_of_Code_2007&amp;diff=29297"/>
		<updated>2007-03-28T19:33:46Z</updated>

		<summary type="html">&lt;p&gt;Plipli: /* Mac OS X Address book integration (Aqua / X11) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Similar to [[SummerOfCode2006|last year]], OpenOffice.org is participating in the [http://code.google.com/soc/ Google Summer of Code](tm) initiative sponsored by Google.&lt;br /&gt;
&lt;br /&gt;
This page collects some suitable task suggestions we got many applications for. We would be glad to support a few projects. The review is in progress and results can be expected for&lt;br /&gt;
[http://code.google.com/support/bin/answer.py?answer=60325&amp;amp;topic=10729 April 11].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Task Proposals=&lt;br /&gt;
&lt;br /&gt;
==API==&lt;br /&gt;
&lt;br /&gt;
===UNO specifications changes in Eclipse Integration===&lt;br /&gt;
&lt;br /&gt;
This project aims at improving the way to develop OpenOffice.org extensions and UNO components using Eclipse. This project should help the developer to changes its specifications easily. This project could be parted into several smaller parts.&lt;br /&gt;
&lt;br /&gt;
See [[EclipseIntegration_ToDo#IDL_files_modification_assistance | the Todo task description]] for further informations.&lt;br /&gt;
&lt;br /&gt;
* Required skills/knowledge: Java, Grammar &amp;amp; Compilers&lt;br /&gt;
* Usefull skills: Eclipse API, JavaCC, UNO &amp;amp; UNO IDL&lt;br /&gt;
&lt;br /&gt;
; Contact&lt;br /&gt;
: dev@api.openoffice.org&lt;br /&gt;
: CedricBosdo at openoffice.org&lt;br /&gt;
&lt;br /&gt;
== Base ==&lt;br /&gt;
&lt;br /&gt;
=== Joins in dBase Queries ===&lt;br /&gt;
&lt;br /&gt;
Queries to dBase files can currently contain one table only. Scope of the project is to enhance Base&amp;#039; built-in simple query engine to be capable of executing statements line &amp;lt;code&amp;gt;SELECT table1.field1, table2.field2 FROM table1, table2&amp;lt;/code&amp;gt;. The dBase driver, the text/csv driver, and the Spreadsheet driver would all benefit from this extension.&lt;br /&gt;
&lt;br /&gt;
Be prepared to dig around here before starting the project, the project touches low-level core implementations, including some heavy-to-read STL stuff, so be prepared to invest some time before writing the first line of code.&lt;br /&gt;
&lt;br /&gt;
* required skills C++, SQL knowledge&lt;br /&gt;
* useful skills: Lexx and Yacc&lt;br /&gt;
* Contact: mailto:dev@dba.openoffice.org&lt;br /&gt;
* Mentor: Ocke Janssen - Ocke.Janssen at Sun.Com&lt;br /&gt;
&lt;br /&gt;
=== Dialogs with Form Functionality ===&lt;br /&gt;
&lt;br /&gt;
When creating a form, the user always needs to bother with a Writer document. Very often, this is much too oversized. It would be sufficient to have a simple dialog which contains all the data access controls.&lt;br /&gt;
&lt;br /&gt;
The advantage would be to not slay the user with things she does not bother – a writer document offers a lot of possibilities which are not relevant for a form. In some cases, a full writer document does even contradict to what users expect from a form – one thing to mention here is that documents are always freely sizable, which is nothing you expect from a carefully designed form, where controls are placed at concrete positions and have a fixed size.&lt;br /&gt;
&lt;br /&gt;
The project is to&lt;br /&gt;
- extend the dialog runtime engine to (optionally) include data-aware form controls&lt;br /&gt;
- create a form designer for dialog-based forms (similar to the existing Basic Dialog IDE)&lt;br /&gt;
- implement persistence of dialog-based forms&lt;br /&gt;
- embed dialog-based forms into database documents (.odb)&lt;br /&gt;
&lt;br /&gt;
Depending on more fine-grained planning, it might become apparent that not all of this can be done in the scope of a Google Summer of Code project, and reasonable milestones need to be defined.&lt;br /&gt;
&lt;br /&gt;
* required skills C++, UNO&lt;br /&gt;
* useful skills: familiarity with OOo&amp;#039;s database access and form API, as well as OOo&amp;#039;s [http://api.openoffice.org/docs/common/ref/com/sun/star/awt/module-ix.html toolkit API]&lt;br /&gt;
* Contact: mailto:dev@dba.openoffice.org&lt;br /&gt;
* Mentor: Frank Schönheit - Frank.Schoenheit at Sun.Com&lt;br /&gt;
&lt;br /&gt;
=== Embed Derby into OpenOffice.org Databases ===&lt;br /&gt;
&lt;br /&gt;
OpenOffice.org Base features an abstract mechanism to embed database backend files into OOo databases (.odb). Currently, this is implemented for [http:///hsqldb.org HSQLDB], which is used as OOo&amp;#039;s default database engine.&lt;br /&gt;
&lt;br /&gt;
To allow this feature for other engines, one must:&lt;br /&gt;
&lt;br /&gt;
* virtualize the engine&amp;#039;s file access, so that it re-routes all its file operations through an abstract API.&lt;br /&gt;
* implement this API on the OOo Base side &lt;br /&gt;
&lt;br /&gt;
The project is to do those implementations for [http://db.apache.org/derby Apache Derby database].&lt;br /&gt;
&lt;br /&gt;
* required skills Java, C++&lt;br /&gt;
* useful skills: OOo&amp;#039;s database access API, OOo&amp;#039;s component technology (UNO)&lt;br /&gt;
* Contact: mailto:dev@dba.openoffice.org&lt;br /&gt;
* Mentor: Ocke Janssen - Ocke.Janssen at Sun.Com&lt;br /&gt;
&lt;br /&gt;
==Calc==&lt;br /&gt;
&lt;br /&gt;
===Integration of R into Calc===&lt;br /&gt;
&lt;br /&gt;
Create an add-on component that allows a Calc user to let the [http://www.r-project.org/ R environment] do calculations on data from Calc cells and put the results into the spreadsheet again.&lt;br /&gt;
&lt;br /&gt;
This should include a dialog to select input parameters and options, and allow results to be values or graph images. Note that the incompatible licenses (R is under GPL) have to be taken care of, possibly by starting R as a separate process.&lt;br /&gt;
&lt;br /&gt;
Some more thoughts on the subject have been collected at [[Statistical Data Analysis Tool#Third Party Library Integration]].&lt;br /&gt;
&lt;br /&gt;
* Required skills/knowledge: Some familiarity with statistical methods&lt;br /&gt;
&lt;br /&gt;
; Contact&lt;br /&gt;
: dev@sc.openoffice.org&lt;br /&gt;
: Niklas.Nebel at sun.com&lt;br /&gt;
&lt;br /&gt;
: Leonard Mada&lt;br /&gt;
: (on statistics and R syntax)&lt;br /&gt;
: discoleo at openoffice.org&lt;br /&gt;
&lt;br /&gt;
===Watch Window===&lt;br /&gt;
&lt;br /&gt;
A Watch Window is a separate, small window that remains &amp;quot;on top&amp;quot; and enables users to monitor a selected set of cells, see [http://www.openoffice.org/issues/show_bug.cgi?id=28386 issue 28386].&lt;br /&gt;
&lt;br /&gt;
This could be implemented as an add-on component with a modeless dialog containing the list of watched cells as well as the UI to add or remove cells.&lt;br /&gt;
&lt;br /&gt;
* Required skills/knowledge: Java or C++&lt;br /&gt;
&lt;br /&gt;
; Contact&lt;br /&gt;
: dev@sc.openoffice.org&lt;br /&gt;
: Niklas.Nebel at sun.com&lt;br /&gt;
&lt;br /&gt;
===Non-Linear Optimizer Development for Optimization Solver===&lt;br /&gt;
This task involves developing a new optimizer to solve general constrait non-linear model for the [[Optimization Solver]] component.  There is now an independent optimizer testing &amp;amp; development framework for non-linear optimizer, so the applicant would not need to understand the entire OO.o code base.&lt;br /&gt;
&lt;br /&gt;
Note that the code for [[Optimization Solver]] is still in the process of upstreaming, so the applicant would be working on a specific branch that contains the [[scsolver]] module.&lt;br /&gt;
&lt;br /&gt;
* Required skills/knowledge: C++, some familiarity with operations research&lt;br /&gt;
&lt;br /&gt;
; Contact&lt;br /&gt;
: dev@sc.openoffice.org&lt;br /&gt;
: kyoshida at novell dot com&lt;br /&gt;
: jody at novell dot com&lt;br /&gt;
&lt;br /&gt;
===Unit Testing Framework for Optimization Solver===&lt;br /&gt;
&lt;br /&gt;
The [[Optimization Solver]] component needs a unit-testing framework for its linear optimizer.  This task would involve collecting a load of test cases (small and large) with known solutions, and write an automated unit-testing program for the linear portion of the optimizer code.&lt;br /&gt;
&lt;br /&gt;
* Required skills/knowledge: C++&lt;br /&gt;
&lt;br /&gt;
; Contact&lt;br /&gt;
: dev@sc.openoffice.org&lt;br /&gt;
: kyoshida at novell dot com&lt;br /&gt;
: jody at novell dot com&lt;br /&gt;
&lt;br /&gt;
===Additional AutoFilter Functionality===&lt;br /&gt;
&lt;br /&gt;
Add core and user interface support for additional forms of filtering&lt;br /&gt;
* Date based filters (eg current year/quarter)&lt;br /&gt;
* Multiple items without falling back on logical OR.&lt;br /&gt;
* Statistical filters (eg within N stddev of mean)&lt;br /&gt;
&lt;br /&gt;
* Required skills/knowledge: C++, Familiarity with OOo frameworks.&lt;br /&gt;
&lt;br /&gt;
; Contact&lt;br /&gt;
: mailto:dev@sc.openoffice.org&lt;br /&gt;
: jody at novell dot com&lt;br /&gt;
&lt;br /&gt;
===Move Older Spreadsheet formats into an UNO Component===&lt;br /&gt;
&lt;br /&gt;
Support for several formats still lives in the core calc module, and bloat it with little used functionality.&lt;br /&gt;
Moving the antiquated filters into a distinct component would be good introduction to UNO and the spreadsheet code.&lt;br /&gt;
If time permits the new component could have support for other simple spreadsheet formats, such as Applix.&lt;br /&gt;
&lt;br /&gt;
* Required skills/knowledge: C++, Familiarity with OOo frameworks.&lt;br /&gt;
&lt;br /&gt;
; Contact&lt;br /&gt;
: mailto:dev@sc.openoffice.org&lt;br /&gt;
: jody at novell dot com&lt;br /&gt;
&lt;br /&gt;
==Extensions==&lt;br /&gt;
&lt;br /&gt;
===OOo connector for External IDE for OOo scripting languages===&lt;br /&gt;
&lt;br /&gt;
This project will solve the problem of lack of IDE for scripting languages in OOo. Scripts can be seen as macros in various languages and are complementary to Extensions.&lt;br /&gt;
Actually, only OOoBasic has its IDE embedded in OOo. Javascript and Beanshell have limited ones and python nothing. To avoid implementing different IDE for various languages into OOo, the proposed choice is to provide a connector to any external IDE&lt;br /&gt;
&lt;br /&gt;
The project is dived into 2 complementary parts :&lt;br /&gt;
* defining and implementing common tools at OOo side to put the scipts at the correct place and manage OOo scripts menus &lt;br /&gt;
* implement an  Eclipse extension as an IDE that could handle scripts in python language, using the previously defined OOo tools.&lt;br /&gt;
&lt;br /&gt;
; Requirements&lt;br /&gt;
* Required skills/knowledge: java, python, UNO &lt;br /&gt;
* Usefull skills: Eclipse API, OOo API, IDE general knowledge&lt;br /&gt;
&lt;br /&gt;
; Contact&lt;br /&gt;
: dev@extensions.openoffice.org&lt;br /&gt;
: LaurentGodard@openoffice.org&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===OOo connector that allows users to interact with the main applications of the Suite in their cellphones===&lt;br /&gt;
&lt;br /&gt;
Development of a Open Office plugin that makes possible inquiring for bluetooth devices in the area and then send, via OBEX protocol, a MIDP 2.0 java mobile application to a choosed device between the ones that have been found previously. In addition the plugin can start a bluetooth server that will listen for received messages, where this server will have an unique identifier, which is the same that was inserted in the sent mobile application.&lt;br /&gt;
&lt;br /&gt;
This mobile JME application will allow user to navigate thought the system directories and the files available in a directory will be filtered by OO files. If the user selects one of the available OO files in the folder, the associated OO application will be opened at the target computer and the mobile application will show an device adapted interface, making this user able to interact with the Open Office applications at that computer: In Impress will be possible to control slide presentation in a slideshow, while a preview of the page is being shown at the device screen; In Calc will be possible to edit rows and columns and so create new spreadsheets; For Writer will be possible to read documents, edit and create new ones.&lt;br /&gt;
&lt;br /&gt;
; Requirements&lt;br /&gt;
* Required skills/knowledge: XML, JSE, JME, UNO Api&lt;br /&gt;
* Usefull skills: Bluetooth Stack Protocol, BlueZ&lt;br /&gt;
&lt;br /&gt;
; Contact&lt;br /&gt;
: brunogh at gmail.com&lt;br /&gt;
: lucastorri at gmail.com&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Easy Language/Linguistics Switcher ===&lt;br /&gt;
&lt;br /&gt;
In countries like India where each person know about 2/3 Indian languages and uses 2/3 scripts when s/he creates documents, easy access to language settings become very necessary. This project aims to provide an intuitive interface to control the install linguitic components for a particular language. Secondly input method control from inside the OpenOffice could also be incorporated. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Required skills/knowledge: C++/Java&lt;br /&gt;
* Useful skills: Basic UNO API knowledge&lt;br /&gt;
&lt;br /&gt;
; Contact&lt;br /&gt;
: RKVS Raman (rkvsraman@openoffice.org )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Framework==&lt;br /&gt;
&lt;br /&gt;
===Shell Extensions for Desktop file search and showing meta data in windows explorer needs to be rewritten for Vista===&lt;br /&gt;
&lt;br /&gt;
Vista changed his mechanism to integrate those shell extensions incompatible. Extensions valid for Win98/2000/XP doesnt work any more. A set of new interfaces was designed. But they are available on Vista only. So OOo has to support two sets of shell extensions: one set for Win98/2000/XP and a new set for Vista and might following windows versions. For this project the new Vista extensions has to be implemented only.&lt;br /&gt;
See [http://www.openoffice.org/issues/show_bug.cgi?id=71112 71112] and [http://www.openoffice.org/issues/show_bug.cgi?id=70944 70944] for further informations.&lt;br /&gt;
&lt;br /&gt;
* Required skills/knowledge: C++&lt;br /&gt;
* Useful skills: Windows API knowledge&lt;br /&gt;
* Requirements: Windows Vista 32 Bit&lt;br /&gt;
&lt;br /&gt;
; Contact&lt;br /&gt;
: dev@framework.openoffice.org, Andreas.Schluens at sun.com&lt;br /&gt;
&lt;br /&gt;
===Status bar control to display/change the language===&lt;br /&gt;
&lt;br /&gt;
Currently the Writer lacks means to display the language in use. There&amp;#039;s also no easy way to change the language as the user has to use the menu. A status bar control would help to solve these problems.  It should help to determine about the language used at the cursor position or the document. The control should be implemented using existing UNO APIs.&lt;br /&gt;
&lt;br /&gt;
* Required skills/knowledge: C++&lt;br /&gt;
* Useful skills: Basic UNO API knowledge&lt;br /&gt;
&lt;br /&gt;
; Contact&lt;br /&gt;
: dev@framework.openoffice.org, Carsten.Driesner at sun.com&lt;br /&gt;
: dev@sw.openoffice.org, Thomas.Lange at sun.com&lt;br /&gt;
&lt;br /&gt;
===Improving UI editing / coupling===&lt;br /&gt;
&lt;br /&gt;
Currently all dialogs (along with most translated strings) are stored in a rather unusual binary resource file format, that has not had much love in the last decade. We need to write some new code that separates the process of designing &amp;amp;amp; laying out the UI from the code - to allow UE to make our UI more beautiful, and allow future re-factoring. The existing Basic GUI dialog editor and it&amp;#039;s XML format should be re-used, a simple C++ compatibility API created, and a number of dialogs converted to the new format.&lt;br /&gt;
&lt;br /&gt;
* Required skills/knowledge: C++&lt;br /&gt;
* Useful skills: courage, stickability, X-rated code reading&lt;br /&gt;
&lt;br /&gt;
; Contact&lt;br /&gt;
: michael.meeks at novell.com&lt;br /&gt;
: hfiguiere at novell.com&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== OpenOffice.org Based Workflow Framework ===&lt;br /&gt;
&lt;br /&gt;
The one feature that is now begging for attention from OpneOffice.org is the colloboration and workflow. The workflow system should leverage on the Xforms support in OpenOffice.org and combine it with other Open Source Products like Shark ( http://www.enhydra.org/workflow/shark/index.html ) and  JaWe ( http://www.enhydra.org/workflow/jawe/index.html ) to create an integrated Xforms based workflow system. The product should have a centralized server component and a client component. The server component interfaces with Process repositories and Process Instance repositories and has  Java based Administration and Definition tools. The client component could be a toolbar which sits  as an addon into the office suite. &lt;br /&gt;
The goal of this project is to provide document workflow from within OpenOffice.org.&lt;br /&gt;
&lt;br /&gt;
; Tasks&lt;br /&gt;
* Make a prototype of docment workflow.&lt;br /&gt;
&lt;br /&gt;
; Required skills/knowledge:&lt;br /&gt;
* Java/J2EE&lt;br /&gt;
* C/C++&lt;br /&gt;
* knowledge of XForms Document Model&lt;br /&gt;
&lt;br /&gt;
; Contact&lt;br /&gt;
: RKVS Raman (rkvsraman@openoffice.org)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Graphics==&lt;br /&gt;
&lt;br /&gt;
===Draw/Impress: SVG Import Filter===&lt;br /&gt;
&lt;br /&gt;
[http://www.w3.org/Graphics/SVG/ SVG (Scalable Vector Graphics)] is a vector graphics format that describes 2D graphics in XML.&lt;br /&gt;
&lt;br /&gt;
There&amp;#039;s no native SVG import filter for OOo. There exists an [http://www.ipd.uka.de/~hauma/svg-import/ external one], but unfortunately it has very strong dependencies - [http://java.sun.com/javase/downloads/index.jsp Java 5.0], and [http://xmlgraphics.apache.org/batik/ Batik].  The goal of this task is to create a new implementation that does not require any too big libraries.&lt;br /&gt;
&lt;br /&gt;
A proof of concept implementation written in C++ using the [http://wiki.services.openoffice.org/wiki/Uno UNO] [http://api.openoffice.org/docs/common/ref/com/sun/star/drawing/module-ix.html Drawing API] and a lighweight [http://cairographics.org/libsvg libsvg library] exists [http://svn.gnome.org/viewcvs/ooo-build/trunk/patches/src680/svg-import.diff here], but it needs a lot of work to be really usable.  Another problem is that libsvg does not seem to be too actively maintained; so the real implementation should use OOo&amp;#039;s [http://wiki.services.openoffice.org/wiki/FastParser internal XML parser].&lt;br /&gt;
&lt;br /&gt;
More information is available in [http://artax.karlin.mff.cuni.cz/~kendy/blog/archives/monthly/2006-10.html#2006-10-02T17_14_44.htm Kendy&amp;#039;s blog].&lt;br /&gt;
&lt;br /&gt;
* Required skills/knowledge: C++, XML knowledge is a plus&lt;br /&gt;
&lt;br /&gt;
; Contact&lt;br /&gt;
: Jan Holesovsky - kendy at openoffice org&lt;br /&gt;
: Fridrich Strba - fridrich_strba at openoffice org&lt;br /&gt;
&lt;br /&gt;
===Impress: OpenGL rendered transitions===&lt;br /&gt;
The goal is to add 3D transitions to the Impress application. Transition is an animation where one page is visible in the beginning and another in the end. It is used during presentation slideshow to switch pages.&lt;br /&gt;
&lt;br /&gt;
In the process of implementing OpenGL transitions an UNO API should be added to slideshow code, so that OpenGL transitions engine might be created as standalone UNO component. Current transitions should be refactored to another UNO component.&lt;br /&gt;
&lt;br /&gt;
The engine will get the previous and next pages and should render the transition at given speed.&lt;br /&gt;
&lt;br /&gt;
The participant should also implement at least 5 OpenGL transitions, rendered by the UNO component.&lt;br /&gt;
&lt;br /&gt;
* Reguired skills/knowledge: C++, OpenGL. familiarity with UNO is welcomed&lt;br /&gt;
&lt;br /&gt;
;Contact:&lt;br /&gt;
:mailto:dev@graphics.openoffice.org&lt;br /&gt;
:Thorsten Behrens - thb at openoffice org&lt;br /&gt;
:Radek Doulik - radekdoulik at openoffice org&lt;br /&gt;
&lt;br /&gt;
===Impress: Import Apple Keynote presentations===&lt;br /&gt;
Write an importer to import XML based Apple Keynote presentation files.&lt;br /&gt;
&lt;br /&gt;
An incomplete format documentation is [http://developer.apple.com/documentation/AppleApplications/Conceptual/iWork2-0_XML/Chapter02/chapter_2_section_1.html#//apple_ref/doc/uid/TP40002479-CH203-DontLinkElementID_65 available on ADC], therefore reverse engineering will be needed. Since the file format change accross the various versions, [http://developer.apple.com/appleapplications/keynote-apxl.html version 1.0] can also be opted.&lt;br /&gt;
&lt;br /&gt;
* Required skills: C++. Familiarity with UNO is welcome.&lt;br /&gt;
&lt;br /&gt;
;Contact:&lt;br /&gt;
:mailto:dev@graphics.openoffice.org&lt;br /&gt;
:Hubert Figuiere - hub AT openoffice org&lt;br /&gt;
&lt;br /&gt;
==ODF Toolkit==&lt;br /&gt;
&lt;br /&gt;
=== Tools and best practice samples for ODF creation and manipulation===&lt;br /&gt;
&lt;br /&gt;
We already have some code snippets in Java and C# and looking for help to extend these tool sets or to provide tool sets in other languages. These tool sets are designed to offer basic ODF functionality even outside of OO.o.&lt;br /&gt;
&lt;br /&gt;
* Required skills/knowledge: Java or C# or Perl or C++ ...&lt;br /&gt;
* Useful skills: ODF, XML&lt;br /&gt;
&lt;br /&gt;
; Contact&lt;br /&gt;
: dev@odftoolkit.openoffice.org, &lt;br /&gt;
: Dieter Loeschky at sun.com&lt;br /&gt;
&lt;br /&gt;
== Porting: Mac OS X native port ==&lt;br /&gt;
&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039;Complete User Interface respecting Aqua Human Interface Guidelines (Aqua Only)&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
&lt;br /&gt;
*Concerns: OpenOffice.org 2.x for Mac OS X Aqua only&lt;br /&gt;
&lt;br /&gt;
*Skills: Knowledge of languages C/C++ Mac OS X APIs and Application frameworks like Carbon&lt;br /&gt;
&lt;br /&gt;
Original OpenOffice.org vcl widgets are not Aqua HIG compliant, and we need to implement all controls, respecting Aqua Human Interface Guidelines, some will use HIView, or HITheme or even other part of Carbon API.&lt;br /&gt;
&lt;br /&gt;
*Tasks:  some controls are already implemented, but some are still missing.&lt;br /&gt;
&lt;br /&gt;
The job consists in write the code and implement: &lt;br /&gt;
&lt;br /&gt;
- tabs (implement and bind the TabitemValue class, using Carbon API)&lt;br /&gt;
&lt;br /&gt;
- spinbuttons (implement and bind  SpinbuttonValue class, using Carbon API)&lt;br /&gt;
&lt;br /&gt;
- comboboxes (implement and use HICombobox)&lt;br /&gt;
&lt;br /&gt;
- listboxes (work already started)&lt;br /&gt;
&lt;br /&gt;
- texts in comboboxes / listboxes  (better task definition to be completed)&lt;br /&gt;
&lt;br /&gt;
- other types of controls:  highlight, respect dimensions/spacing ..etc&lt;br /&gt;
&lt;br /&gt;
- Windows background (using Aqua theme)  &lt;br /&gt;
&lt;br /&gt;
;Proposed by: Eric Bachard &lt;br /&gt;
;Contact:  mac@porting.openoffice.org &lt;br /&gt;
;Mentor:  Eric Bachard ( ericb at openoffice dot org )&lt;br /&gt;
&lt;br /&gt;
=== Mac OS X native printing (Aqua only) ===&lt;br /&gt;
&lt;br /&gt;
Concerns: OpenOffice.org 2.x for Mac OS X Aqua only&lt;br /&gt;
&lt;br /&gt;
Objective: currently, the native printing implementation is missing on Aqua port and needs to be implemented.&lt;br /&gt;
&lt;br /&gt;
The objective is to use the same box users have in any Mac application.&lt;br /&gt;
&lt;br /&gt;
Skills: Knowledge of languages C/C++ Mac OS X APIs and Application frameworks like Carbon and /or Cocoa&lt;br /&gt;
&lt;br /&gt;
Tasks:  &lt;br /&gt;
&lt;br /&gt;
Familiarize with the Mac OS X printing APIs&lt;br /&gt;
&lt;br /&gt;
Familiarize with the current OOo printing API&lt;br /&gt;
&lt;br /&gt;
Expected: Write code to Implement native printing with Aqua version of OpenOffice.org: &lt;br /&gt;
&lt;br /&gt;
; Contact&lt;br /&gt;
: mac@porting.openoffice.org&lt;br /&gt;
: fheckl at openoffice dot org &lt;br /&gt;
&lt;br /&gt;
;Proposed by:  Florian Heckl &lt;br /&gt;
&lt;br /&gt;
;Mentor:  Florian Heckl&lt;br /&gt;
&lt;br /&gt;
=== Mac OS X Address book integration (Aqua / X11) ===&lt;br /&gt;
&lt;br /&gt;
Synopsis: OOo currently is integrated with the Mozilla address book but not with the native Mac OS X address book. This is annoying for Mac OS X user. For better system integration it would be desirable to integrate with the Mac OS X address book.&lt;br /&gt;
&lt;br /&gt;
Concerns: OpenOffice.org 2.x for Mac OS X (both Aqua and X11 versions)&lt;br /&gt;
&lt;br /&gt;
;Skills: Knowledge of languages C/C++, Mac OS X APIs and Application frameworks like Carbon or Cocoa for instance, knowledge of the Mac OS X address book APIs&lt;br /&gt;
&lt;br /&gt;
;Tasks: &lt;br /&gt;
&lt;br /&gt;
Familiarize with the Mac OS X address book APIs &lt;br /&gt;
&lt;br /&gt;
Familiarize with the current OOo Mozilla address book integration &lt;br /&gt;
&lt;br /&gt;
Make a prototype for OOo Mac OS X address book integration&lt;br /&gt;
&lt;br /&gt;
;Contact&lt;br /&gt;
mac@porting.openoffice.org&lt;br /&gt;
&lt;br /&gt;
;Mentor:  Sebastien Plisson&lt;br /&gt;
&lt;br /&gt;
==VBA==&lt;br /&gt;
&lt;br /&gt;
===Word macro compatibility===&lt;br /&gt;
&lt;br /&gt;
Recently Sun and Novell announced to pool resources to provide VBA macro compatability see  [http://blogs.sun.com/GullFOSS/entry/sun_and_novell_work_together here]. &lt;br /&gt;
&lt;br /&gt;
Currently work in the project is concentrated on providing Excel support by &lt;br /&gt;
* providing the framework for the compatibiltiy api via a plugable component&lt;br /&gt;
* modifying the basic engine to support more compatibility features&lt;br /&gt;
* porting the [http://wiki.services.openoffice.org/wiki/Helperapi helperapi] code (for excel) to c++ (see. [http://wiki.services.openoffice.org/wiki/VBA here] &amp;amp; [http://wiki.services.openoffice.org/wiki/Porting_notes here])&lt;br /&gt;
&lt;br /&gt;
Tasks&lt;br /&gt;
 &lt;br /&gt;
* extend the base framework by developing helper objects and implementations to be used by both the excel and writer compatibility object implementations&lt;br /&gt;
* port the existing (word) helper api objects from Java to C++ &lt;br /&gt;
&lt;br /&gt;
Required skills/knowledge &lt;br /&gt;
&lt;br /&gt;
* C++&lt;br /&gt;
* Java&lt;br /&gt;
useful skills: &lt;br /&gt;
&lt;br /&gt;
* knowledge of OOo&amp;#039;s writer access API&lt;br /&gt;
* knowledge of OOo&amp;#039;s component technology (UNO)&lt;br /&gt;
* experience with VBA macros and Word VBA api &lt;br /&gt;
 &lt;br /&gt;
Mentor/Contact &lt;br /&gt;
* noel.power at novell dot com&lt;br /&gt;
&lt;br /&gt;
== Writer ==&lt;br /&gt;
&lt;br /&gt;
===Writer: Better &amp;quot;Notes&amp;quot; functionality===&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Notes&amp;quot; functionality in Writer could be better in terms of usability and does not look very appealing. &lt;br /&gt;
&lt;br /&gt;
* Required skills/knowledge: C++&lt;br /&gt;
&lt;br /&gt;
; Contact&lt;br /&gt;
: dev@sw.openoffice.org&lt;br /&gt;
: Mathias.Bauer at sun.com&lt;br /&gt;
&lt;br /&gt;
; Resources&lt;br /&gt;
[http://blogs.linux.ie/caolan/2007/03/12/notesmarginnotes-in-sw/ hopefully helpful illustrative patch]&lt;br /&gt;
&lt;br /&gt;
===MS Works Import Filter===&lt;br /&gt;
&lt;br /&gt;
Unlike its proprietary derivatives, OpenOffice.org lacks MS Works import filter. The creation of MS Works import filter is one of functionalities requested by our users. There is a basic import filter work started and the result is to be found in CWS wpsimport01. This filter, based on recently started libwps[http://libwps.sourceforge.net] library is offering only limited number of features converted. It is desirable to build on this work and improve this library/filter so that the quality meets industry standards.&lt;br /&gt;
&lt;br /&gt;
* Required skills/knowledge: C++, solid knowledge of MS Works wordprocessing document file-format and of libwps library.&lt;br /&gt;
&lt;br /&gt;
; Contact&lt;br /&gt;
: mailto:dev@sw.openoffice.org&lt;br /&gt;
: fridrich_strba at openoffice.org&lt;br /&gt;
: freuter at novell.com&lt;br /&gt;
&lt;br /&gt;
===RTF Generator===&lt;br /&gt;
&lt;br /&gt;
The current RTF export of OpenOffice.org is not as good as the export to the Word (.doc) format. Parsing the generated Word format stream with a Word tokenizer and handing over the generated events to an RTF generator would lead to an RTF export filter with the same quality as the binary Word export filter. Remark: the tokenizer itself isn&amp;#039;t complete today but in its current state covers enough parts of the Word format to make this a valuable project for the planned time span.&lt;br /&gt;
&lt;br /&gt;
* Required skills/knowledge: C++, some knowledge about the Word file format would be a plus&lt;br /&gt;
&lt;br /&gt;
; Contact&lt;br /&gt;
: dev@sw.openoffice.org&lt;br /&gt;
: Henning.Brinkmann at sun.com&lt;br /&gt;
&lt;br /&gt;
=== Logging framework ===&lt;br /&gt;
&lt;br /&gt;
During the import/export process from alien file formats there might be some features which can not be mapped entirely.&lt;br /&gt;
The goal of this project is to provide a loggin framework for the new domainmapper of the writer filter project, which&lt;br /&gt;
allow the domainmapper to notify the user of such mapping problems.&lt;br /&gt;
&lt;br /&gt;
* Required skills/knowledge: C++&lt;br /&gt;
&lt;br /&gt;
; Contact&lt;br /&gt;
: mailto:dev@sw.openoffice.org&lt;br /&gt;
: Florian Reuter (freuter at novell.com)&lt;br /&gt;
: Fridrich Strba (fridrich_strba at openoffice org)&lt;br /&gt;
&lt;br /&gt;
=== UOF import filter ===&lt;br /&gt;
&lt;br /&gt;
Specification for the Chinese office file format based on XML (UOF for short) is a National Standard of the People’s Republic of China.  The open source project &amp;quot; ODF‑UOF Converter&amp;quot; hosted by Peking University have been finished in October, 2006. More information is available in http://odf-to-uof.sourceforge.net/index.html.&lt;br /&gt;
&lt;br /&gt;
The goal of this project is to provide interoperability with UOF documents.&lt;br /&gt;
&lt;br /&gt;
; Tasks&lt;br /&gt;
* Make a prototype of UOF import filter for OOo.&lt;br /&gt;
&lt;br /&gt;
; Required skills/knowledge:&lt;br /&gt;
* C++&lt;br /&gt;
* knowledge of ODF, UOF&lt;br /&gt;
* knowledge of OOo&amp;#039;s xml filter&lt;br /&gt;
&lt;br /&gt;
; Contact&lt;br /&gt;
: mailto:dev@sw.openoffice.org&lt;br /&gt;
: Fong Lin (pflin@novell.com)&lt;br /&gt;
: Jian Hua (jjiao@novell.com)&lt;br /&gt;
&lt;br /&gt;
=New Tasks=&lt;br /&gt;
&lt;br /&gt;
If you have a task that is challenging enough, and there is an OpenOffice.org Project Member willing to mentor the task, feel free to coordinate with the appropriate project lead. If the appropriate project has been found and it supports the task, add it below and make sure the mentor applies with the web app.&lt;br /&gt;
&lt;br /&gt;
Each entry should contain the task description, required skills, project mailing list for discussion and personal contact.  Links to the [[To-Dos]] are appreciated provided that the task is well described there ;-)&lt;br /&gt;
&lt;br /&gt;
 ===Example entry===&lt;br /&gt;
 &lt;br /&gt;
 This is just an example - the real entry must not start with a space at the beginning&lt;br /&gt;
 of the line.&lt;br /&gt;
 A full description of the task should be here; one that will help to see that this task&lt;br /&gt;
 is important,  and interesting to hack on.  Alternatively it could be an exact link to&lt;br /&gt;
 the description that is already in [[To-Dos]].&lt;br /&gt;
 &lt;br /&gt;
 * Required skills/knowledge: Language, technology1, technology2, ...&lt;br /&gt;
 &lt;br /&gt;
 ; Contact&lt;br /&gt;
 : dev@project.openoffice.org&lt;br /&gt;
 : The.Mentor at organization com&lt;br /&gt;
&lt;br /&gt;
=Advise for Student Applications=&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;The application period is over.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Mentoring capacities are limited, so we depend on your dedication during the preparation of the detailed specification and description of the outcome.&lt;br /&gt;
 &lt;br /&gt;
Please review the [http://code.google.com/support/bin/topic.py?topic=10442 FAQ]&lt;br /&gt;
and the&lt;br /&gt;
[http://groups.google.com/group/google-summer-of-code-announce/web/guide-to-the-gsoc-web-app-for-student-applicants guide to the web app]. Be sure to take the [http://code.google.com/p/google-summer-of-code/wiki/AdviceforStudents advice for students] seriously.&lt;br /&gt;
Don&amp;#039;t hesitate to raise questions about tasks on the project mailing list mentioned in the task description before you send your application. We are glad to receive many qualified submissions touching on the information mentioned in the [http://code.google.com/support/bin/answer.py?answer=60306&amp;amp;topic=10727 knowledge base].&lt;br /&gt;
&lt;br /&gt;
And then - &amp;#039;&amp;#039;&amp;#039;[http://code.google.com/soc/student_step1.html apply]&amp;#039;&amp;#039;&amp;#039; for an OpenOffice.org task.&lt;br /&gt;
&lt;br /&gt;
Thanks and Good luck!&lt;/div&gt;</summary>
		<author><name>Plipli</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Mac_OS_X_Implementing_HIView&amp;diff=28946</id>
		<title>Mac OS X Implementing HIView</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Mac_OS_X_Implementing_HIView&amp;diff=28946"/>
		<updated>2007-03-25T07:50:31Z</updated>

		<summary type="html">&lt;p&gt;Plipli: /* VCL / AQUA traces deductions (plipli) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Contributors ==&lt;br /&gt;
&lt;br /&gt;
Eric Bachard[[http://wiki.services.openoffice.org/wiki/User:Ericb ericb]]&lt;br /&gt;
&lt;br /&gt;
Sébastien Plisson [[http://wiki.services.openoffice.org/wiki/User:Plipli plipli]]&lt;br /&gt;
&lt;br /&gt;
== Introduction == &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[DRAFT]  : means,  not yet working, work in progress ... &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
HIObject is a common base class for all user interface objects and all menus, windows, controls, toolbars, and so on, are subclasses of HIObject.&lt;br /&gt;
&lt;br /&gt;
HIView is an object-oriented view system subclassed from HIObject. All controls are implemented as HIView objects (&amp;quot;views&amp;quot;). You can easily subclass HIView classes, making it easy to implement custom controls. Over time the HIView API will replace the current Control Manager. See [[http://developer.apple.com/documentation/Carbon/Conceptual/HandlingWindowsControls/hitb-wind_cont_tasks/chapter_3_section_9.html HIView intro]]&lt;br /&gt;
&lt;br /&gt;
The main idea behind HIView is to superpose plans, to create any view, using compositing possibilities of Quartz Graphical Engine. &lt;br /&gt;
&lt;br /&gt;
The final result is the superposition of all plans, following simple rules like :&lt;br /&gt;
&lt;br /&gt;
 - The last plan is always drawn on the previous one ;&lt;br /&gt;
 - Some plans can  be declared visible, or not, very easely.&lt;br /&gt;
&lt;br /&gt;
This page is part of [[http://wiki.services.openoffice.org/wiki/Mac_OS_X_Porting_-_Native_Controls Native Controls Implementation]] and the objective is to use HIView for HIComboboxes or other HI*  controls. &lt;br /&gt;
&lt;br /&gt;
Our objective is to bind vcl controls with HI* controls, from Carbon API. &lt;br /&gt;
&lt;br /&gt;
e.g.  :  implement HICombobox as one control only.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The generic implementation, under tests (and not fully working), uses : &lt;br /&gt;
&lt;br /&gt;
HI* events definitions in aquavclevents.hxx &lt;br /&gt;
&lt;br /&gt;
Event handler implementation in HandleHIViewEvent()&lt;br /&gt;
&lt;br /&gt;
The use of HandleHIViewEvent() in AquaSalFrame::CreateNewSystemWindow()&lt;br /&gt;
&lt;br /&gt;
The use of HI* controls, in vcl, when ::CreateNewSystemWindow() is used, calling HandleHIViewEvent(), when HI* events are detected in the frame.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note : we &amp;quot;or&amp;quot;- ed kWindowCompositingAttribute in nWindowAttributes, to see compositing effects. &lt;br /&gt;
[FIXME] : investigate, because use this attribute causes refresh issues&lt;br /&gt;
&lt;br /&gt;
== Reengineer Events handling (plipli) ==&lt;br /&gt;
&lt;br /&gt;
Main files : salframe.cxx, salframe.h, aquavclevents.hxx&lt;br /&gt;
&lt;br /&gt;
Description :&lt;br /&gt;
&lt;br /&gt;
In OOo, the class SalFrame defines the object containing :&lt;br /&gt;
- a window&lt;br /&gt;
- other objects related to window management system&lt;br /&gt;
&lt;br /&gt;
AquaSalFrame is the native implementation of VCL Salframe.&lt;br /&gt;
&lt;br /&gt;
== VCL / AQUA traces deductions (ericb) ==&lt;br /&gt;
1)&lt;br /&gt;
&lt;br /&gt;
== Technical principles ==&lt;br /&gt;
&lt;br /&gt;
1) OO ask to VCL / native implementation code to draw controls (ie DrawNativeControl) or images or text&lt;br /&gt;
&lt;br /&gt;
2) For controls, native implementation code create objects but do not draw them&lt;br /&gt;
For images and text, native code draw objects to context (from QDBegin) or context from HiView event&lt;br /&gt;
&lt;br /&gt;
3) When HIView events are received by event handler, especially kEventControlDraw, native code should draw controls to context given by the event&lt;br /&gt;
&lt;br /&gt;
4) Native code call needsDisplay functions to tell Quartz which zone to update&lt;br /&gt;
&lt;br /&gt;
== Current code implementation==&lt;br /&gt;
&lt;br /&gt;
===Events for HIView ===&lt;br /&gt;
&lt;br /&gt;
Two sorts of events are needed: &lt;br /&gt;
&lt;br /&gt;
*for objects (ClasskEventClassHIObject )  :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;kEventHIObjectConstruct&lt;br /&gt;
&lt;br /&gt;
kEventHIObjectInitialize&lt;br /&gt;
&lt;br /&gt;
kEventHIObjectDestruct&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*for controls themselves ( Class kEventClassControl ) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;kEventControlDraw &lt;br /&gt;
&lt;br /&gt;
kEventControlInitialize&lt;br /&gt;
&lt;br /&gt;
kEventControlHitTest&lt;br /&gt;
&lt;br /&gt;
kEventControlGetPartRegion&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Current implementation : see vcl/aqua/aquavclevents.hxx for more informations about the syntax.&lt;br /&gt;
&lt;br /&gt;
===Install Event Handler ===&lt;br /&gt;
&lt;br /&gt;
Now we have to install event Handler, inside AquaSalFrame::CreateNewSystemWindow() :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
InstallEventHandler (&lt;br /&gt;
                           GetControlEventTarget (mhView),&lt;br /&gt;
                           NewEventHandlerUPP (HandleHIViewEvent),&lt;br /&gt;
                           GetEventTypeCount (cHIViewEvent),&lt;br /&gt;
                           cHIViewEvent,&lt;br /&gt;
                           (void*)mhView, // note the use of the pointer &lt;br /&gt;
                           NULL&lt;br /&gt;
                           );&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== The HI* Event Handler ===&lt;br /&gt;
&lt;br /&gt;
The Handler is OSStatus type, and is used when events are detected.&lt;br /&gt;
&lt;br /&gt;
e.g.  : we created HandleHIViewEvent() &lt;br /&gt;
&lt;br /&gt;
using GetEventParameter, itself using the parameters described in Apple documentation. &lt;br /&gt;
&lt;br /&gt;
Code sample :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
OSStatus HandleHIViewEvent(EventHandlerCallRef inHandlerCallRef, EventRef inEvent, void* inUserData)&lt;br /&gt;
{ &lt;br /&gt;
    //lock&lt;br /&gt;
    ImplSalYieldMutexAcquire();&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    OSStatus status = noErr;&lt;br /&gt;
    &lt;br /&gt;
    // we use mrContext, global and seen from everywhere &lt;br /&gt;
    CGContextRef mrContext; &lt;br /&gt;
    &lt;br /&gt;
    // create HIRect, contianing the control bounds ( in local coordinates) &lt;br /&gt;
    HIRect bounds;  &lt;br /&gt;
&lt;br /&gt;
    status = GetEventParameter (inEvent, &lt;br /&gt;
                                kEventParamCGContextRef, &lt;br /&gt;
                                typeCGContextRef, &lt;br /&gt;
                                NULL, &lt;br /&gt;
                                sizeof (CGContextRef), &lt;br /&gt;
                                NULL, &lt;br /&gt;
                                &amp;amp;mrContext); &lt;br /&gt;
&lt;br /&gt;
    // not used, but usefull&lt;br /&gt;
    //require_noerr(status, CantGetGraphicsContext); // 2&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
    // We need to know the bounds containing the current control &lt;br /&gt;
    HIViewGetBounds ((HIViewRef) inUserData, &amp;amp;bounds); &lt;br /&gt;
&lt;br /&gt;
    // not used, but usefull&lt;br /&gt;
    //require_noerr(status, CantGetBoundingRectangle);&lt;br /&gt;
&lt;br /&gt;
    // unlock &lt;br /&gt;
    ImplSalYieldMutexRelease();&lt;br /&gt;
    &lt;br /&gt;
    return status;  &lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===HIView use in AquaSalFrame::CreateNewSystemWindow()  ===&lt;br /&gt;
&lt;br /&gt;
Code sample : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    //  TEST HIVIew part &lt;br /&gt;
    // Set mrContentView with HIView Content ViewRef&lt;br /&gt;
  &lt;br /&gt;
        HIRect myViewRect;&lt;br /&gt;
        myViewRect.origin.x = aContentRect.left; &lt;br /&gt;
        myViewRect.origin.y = aContentRect.right; &lt;br /&gt;
        myViewRect.size.width = aContentRect.right-aContentRect.left; &lt;br /&gt;
        myViewRect.size.height = aContentRect.bottom-aContentRect.top; &lt;br /&gt;
        OSStatus errval;&lt;br /&gt;
        errval = HIViewFindByID(HIViewGetRoot(mrWindow), kHIViewWindowContentID, &amp;amp;mrContentView); &lt;br /&gt;
&lt;br /&gt;
        // make the view visible                        &lt;br /&gt;
        HIViewSetVisible (mrContentView, true); &lt;br /&gt;
        &lt;br /&gt;
        // set the frame&lt;br /&gt;
        HIViewSetFrame (mrContentView, &amp;amp;myViewRect);&lt;br /&gt;
&lt;br /&gt;
        // Activate content view and children&lt;br /&gt;
        HIViewSetActivated (mrContentView,true);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Controls ===&lt;br /&gt;
&lt;br /&gt;
[FIXME]&lt;br /&gt;
&lt;br /&gt;
Example : HICombobox&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; code located in vcl/aqua/source/gdi/salnativewidgets.cxx  , where all NWF are defined &lt;br /&gt;
&lt;br /&gt;
1) declare CTRL_COMBOBOX control as &amp;quot;true&amp;quot; in isNativeControlSupported() &lt;br /&gt;
&lt;br /&gt;
2) get the control region in getNativeControlRegion() &lt;br /&gt;
&lt;br /&gt;
3) add CTRL_COMBOBOX case in drawNativeControl()&lt;br /&gt;
&lt;br /&gt;
Code sample for the last part (Warning : not yet working !! ) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 switch( nType )&lt;br /&gt;
    {&lt;br /&gt;
            &lt;br /&gt;
        case CTRL_COMBOBOX:&lt;br /&gt;
        if ( ( nPart==PART_BUTTON_DOWN) ||  (nPart==PART_SUB_EDIT) || (nPart==PART_ENTIRE_CONTROL) || (nPart==HAS_BACKGROUND_TEXTURE))&lt;br /&gt;
&lt;br /&gt;
        .... (other code ) &lt;br /&gt;
&lt;br /&gt;
                    HIViewRef myCombo;&lt;br /&gt;
                                        &lt;br /&gt;
                    HIRect rc2;&lt;br /&gt;
                    &lt;br /&gt;
                    rc2.origin.x = rControlRegion.GetBoundRect().Left();&lt;br /&gt;
                    rc2.origin.y = rControlRegion.GetBoundRect().Top();&lt;br /&gt;
                    rc2.size.width = rControlRegion.GetBoundRect().GetWidth();&lt;br /&gt;
                    rc2.size.height = rControlRegion.GetBoundRect().GetHeight();&lt;br /&gt;
                    &lt;br /&gt;
                    HIComboBoxCreate ( &amp;amp;rc2 , NULL, NULL, NULL, kHIComboBoxStandardAttributes, &amp;amp;myCombo);&lt;br /&gt;
                    &lt;br /&gt;
                    HIViewSetVisible ( myCombo, true);&lt;br /&gt;
                    HIViewAddSubview (mrView, myCombo); &lt;br /&gt;
                    &lt;br /&gt;
                    HIViewSetNeedsDisplay (myCombo, true);                   &lt;br /&gt;
                    &lt;br /&gt;
                    printf (&amp;quot;rc2.origin.x %.0f  \n rc2.origin.y %.0f \n rc2.size.width %.0f \n rc2.size.height %.0f \n&amp;quot;, &lt;br /&gt;
                    rc2.origin.x, rc2.origin.y, rc2.size.width , rc2.size.height );&lt;br /&gt;
                                        &lt;br /&gt;
                    //HIViewSetActivated (myCombo,true);&lt;br /&gt;
&lt;br /&gt;
                     .....  (other code )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usefull Links ==  &lt;br /&gt;
&lt;br /&gt;
=== References ===&lt;br /&gt;
&lt;br /&gt;
[[http://developer.apple.com/documentation/Carbon/Conceptual/HandlingWindowsControls/hitb-wind_cont_tasks/chapter_3_section_9.html Introducing HIView]]&lt;br /&gt;
&lt;br /&gt;
OverView : [[http://developer.apple.com/carbon/HIToolbox_feature.html HIToolbox]] &lt;br /&gt;
&lt;br /&gt;
HIVIew  : [[http://developer.apple.com/documentation/Carbon/Reference/HIViewReference/Reference/reference.html reference]] [[http://developer.apple.com/documentation/Carbon/Reference/HIViewReference/HIViewReference.pdf or .pdf format]]&lt;br /&gt;
&lt;br /&gt;
[[http://developer.apple.com/documentation/Carbon/Conceptual/Upgrading_HIToolbox/index.html Upgrading to HIToolbox]]&lt;br /&gt;
&lt;br /&gt;
===Code sample ===&lt;br /&gt;
&lt;br /&gt;
Build a big toy with all controls included : [http://developer.apple.com/samplecode/AppearanceSampleUpdated/listing575.html All controls + code around]&lt;br /&gt;
&lt;br /&gt;
High Level Toolbox, HIServices Release Notes : [http://developer.apple.com/releasenotes/Carbon/RN-HIToolbox/ HIToolbox]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Porting]]&lt;br /&gt;
[[Category:MacOSX]]&lt;br /&gt;
[[Category:Aqua]]&lt;/div&gt;</summary>
		<author><name>Plipli</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=User:Ericb&amp;diff=28945</id>
		<title>User:Ericb</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=User:Ericb&amp;diff=28945"/>
		<updated>2007-03-25T07:28:51Z</updated>

		<summary type="html">&lt;p&gt;Plipli: /* &amp;#039;&amp;#039;&amp;#039;Mac OS X Implementing HIView&amp;#039;&amp;#039;&amp;#039; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Public Documentation License Notice==&lt;br /&gt;
&lt;br /&gt;
The contents of this Documentation (excepted Native Port Roadmap),are subject to the Public Documentation License Version 1.0 (the &amp;quot;License&amp;quot;); you may only use this Documentation if you comply with the terms of this License. A copy of the License is available at http://www.openoffice.org/licenses/PDL.html.&lt;br /&gt;
The Original Documentation is &amp;quot;Mac OS X native port&amp;quot;. The Initial Writer of the Original Documentation is (JCA) Eric Bachard (C) 2005-2006. All Rights Reserved. (Initial Writer contact(s): ericb@openoffice.org.)&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Mac OS X Native port&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;messagebox cleanup metadata&amp;quot; style=&amp;quot;border:1px solid blue;background-color:#B3FFF5;padding:7px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;The first Mac OS X native port objective is make OpenOffice.org run without X11 use, to make it a real Mac application.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;The second one is respect Aqua Human interface Guidelines&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; This is a long term work, and every help and/or contributions, like donations** are welcome.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 **see http://contributing.openoffice.org/index.html&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Native Port Roadmap&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;2006&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
* June 2006: work in progress &lt;br /&gt;
&lt;br /&gt;
- Basis: frame, instances, threads, drawing, painting, resizing (Stephan Schaefer, Tino Rachui)&lt;br /&gt;
&lt;br /&gt;
 Done: &lt;br /&gt;
 implement threads&lt;br /&gt;
 create, manage instance&lt;br /&gt;
 create, manage windows (including parents)&lt;br /&gt;
 create, manage events&lt;br /&gt;
 create manage drawing, resizing&lt;br /&gt;
 create, add menus (Pavel Janik)&lt;br /&gt;
 toggle window fullscreen (Pierre de Filippis)&lt;br /&gt;
 make font server work (Stephan Schaefer)&lt;br /&gt;
&lt;br /&gt;
* Current status font support (Stephan Schaefer, 2006/07/28): the following features are basically working now&lt;br /&gt;
** font selection&lt;br /&gt;
** font size&lt;br /&gt;
** simple font attributes (bold, italic)&lt;br /&gt;
&lt;br /&gt;
 Next step: document first part, and propose design&lt;br /&gt;
&lt;br /&gt;
- native filepicker (Pavel Janik, Florian Heckl)&lt;br /&gt;
&lt;br /&gt;
- native printing implementation (Oliver?)&lt;br /&gt;
&lt;br /&gt;
- native font implementation (Eric Bachard)&lt;br /&gt;
&lt;br /&gt;
* September 2006: &lt;br /&gt;
&lt;br /&gt;
- first proofs of concept: fonts, filepicker .. (more?)&lt;br /&gt;
- show the results (OOoCon 2006?)&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;2007&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
* January 2007: first alpha implementation&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Strategy for native port&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Possible Actions&amp;#039;&amp;#039;&amp;#039;: &lt;br /&gt;
&lt;br /&gt;
Identify us:&lt;br /&gt;
&lt;br /&gt;
#Complete the arrays below&lt;br /&gt;
#Update photos on frapr.com?&lt;br /&gt;
&lt;br /&gt;
Share the work:&lt;br /&gt;
&lt;br /&gt;
#Divide the work between little Teams&lt;br /&gt;
#Update Todo list regularly -&amp;gt; needs some love these days ... [http://wiki.services.openoffice.org/wiki/Mac_OS_X_Porting_-_Work_Areas/Todo%27s]&lt;br /&gt;
&lt;br /&gt;
Help:&lt;br /&gt;
&lt;br /&gt;
#Teach tools between us&lt;br /&gt;
#Do a debug party on IRC&lt;br /&gt;
#write documentation&lt;br /&gt;
&lt;br /&gt;
Meet us:&lt;br /&gt;
&lt;br /&gt;
#IRC&lt;br /&gt;
#Mac Meeting (like nov2005 in Hamburg?)&lt;br /&gt;
&lt;br /&gt;
Inform:&lt;br /&gt;
&lt;br /&gt;
#Update website regularly&lt;br /&gt;
#Blogs&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;WHO&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
Mac Team:&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;vertical-align:top; text-align:left; background-color:#efefef;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#d6d6d6;font-weight:bold;&amp;quot; &lt;br /&gt;
|Developer \ skills || build || write code || code review || debug/trace (higher is better) || contribute to documentation ||&lt;br /&gt;
|-&lt;br /&gt;
|ericb|| x || x || || 1 || x ||&lt;br /&gt;
|-&lt;br /&gt;
|pjanik|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|ssa|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|maho|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|tinor|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|schmidtm|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|ebischoff|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|obr|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|cl|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|aliscafo|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|fheckl|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Fridrich|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|plipli|| || x || || || x ||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Other resources&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
fonts: ?&lt;br /&gt;
&lt;br /&gt;
events: ?&lt;br /&gt;
&lt;br /&gt;
QA: James McKenzie leads QA for the Mac OS X port of OpenOffice.org and is looking for volunteers to spread this effort over several people and needs people from all over the world to test various languages.&lt;br /&gt;
&lt;br /&gt;
graphical: ?&lt;br /&gt;
&lt;br /&gt;
Communication: ?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;WHAT&amp;#039;&amp;#039;&amp;#039;: Status of most important tasks&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;vertical-align:top; text-align:left; background-color:#efefef;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#d6d6d6;font-weight:bold;&amp;quot; &lt;br /&gt;
| Task || Names|| Urgency (1=higher)|| Work in Progress || Done || Code review || Debug || Integration || &lt;br /&gt;
|-&lt;br /&gt;
|Get rid of X11||done || 1 || x || x || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Bundle|| || 1 || x || || || || | ||&lt;br /&gt;
|-&lt;br /&gt;
|Drawing|| || 1 || x || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Fonts||plipli || 1 || x || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Events management|| || 2 || x || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Controls (see list) ||ericb, aliscafo || 2 || x || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Native FilePicker||Florian Heckl, Pavel Janik || 3 || x || x || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Native Printing||Yvan Barthelemy || 3 || x || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Native SpellChecker|| || 4 || || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Player||Mox Soini || 4 || x || || || || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Other tasks:&lt;br /&gt;
&lt;br /&gt;
Help for writing bug lists, status of bugs ..etc&lt;br /&gt;
&lt;br /&gt;
Write howto use gdb, leaks, other tools&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;WHEN&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
From Christian Lippka (last meeting, 25th of august 2006): &lt;br /&gt;
 Aug 26 00:21:38 ChristianL&lt;br /&gt;
 from my point of view what is missing for point 1:&lt;br /&gt;
 text layout, complete font support, keyboard support,&lt;br /&gt;
 fixing repaint issues, having aqua install and run out of the box&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;September 2006&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Present the current state of the project at the 2006 OpenOffice conference in Lyon and Paris&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Late 2006&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
fix OpenOffice.org launch&lt;br /&gt;
fix drawing (repainting)&lt;br /&gt;
Implement missing methods and fix most important bugs (mainly the one leading to crash) in:&lt;br /&gt;
ATS&lt;br /&gt;
Salgraphics&lt;br /&gt;
Salinstance&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;January or February 2007&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
make Java work (works partially)&lt;br /&gt;
make intensive debug&lt;br /&gt;
present something working as alpha&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;June 2007	&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Implementation of:&lt;br /&gt;
native filepicker&lt;br /&gt;
native printing&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Become a Domain Developer for Mac OS X port&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
People regularly contributing to Mac OS x port with regular and quality patches are, after proposal, invited to become a [[DomainDeveloper]].&lt;br /&gt;
&lt;br /&gt;
The purpose of this document is to clearly define all the steps to become a [[DomainDeveloper]]. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Preliminary :  step 1 in  [[Commit_Rights]] must be completed and checked, and you must be in the list of [[http://www.openoffice.org/FAQs/faq-licensing.html#jca1 JCA Licensed people]]&lt;br /&gt;
&lt;br /&gt;
=== Steps for ssh2 key to be uploaded ===&lt;br /&gt;
&lt;br /&gt;
==== Create the key ====&lt;br /&gt;
&lt;br /&gt;
Everything is described here : [[http://www.openoffice.org/scdocs/ddSSHGuide.html SSH Guide]] &lt;br /&gt;
&lt;br /&gt;
==== Upload the key ====&lt;br /&gt;
&lt;br /&gt;
You must create an issue, like described below  :&lt;br /&gt;
&lt;br /&gt;
Component : www&lt;br /&gt;
&lt;br /&gt;
Sub Component : openoffice.org cvs&lt;br /&gt;
&lt;br /&gt;
Title : CVS Commit access request&lt;br /&gt;
&lt;br /&gt;
Add louis ( Louis Suarez Potts) or st ( Stefan Taxhet ) on CC&lt;br /&gt;
&lt;br /&gt;
Upload your ssh2 public key respecting the process ( Attach a DSA key, not an RSA )&lt;br /&gt;
&lt;br /&gt;
A project lead will confirm your request &lt;br /&gt;
&lt;br /&gt;
Then the support will upload your key&lt;br /&gt;
&lt;br /&gt;
Once done the issue is set to Fixed , and the next step has to be verified before &amp;#039;&amp;#039;&amp;#039;you&amp;#039;&amp;#039;&amp;#039; close it.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;EXAMPLE&amp;#039;&amp;#039;&amp;#039; : [[http://www.openoffice.org/issues/show_bug.cgi?id=75291 Upload SSH2 Key for Etsushi Kato]]&lt;br /&gt;
&lt;br /&gt;
==== Verify it works ====&lt;br /&gt;
&lt;br /&gt;
You now can try to connect via tunnel, and follow instructions given [[http://www.openoffice.org/scdocs/ddSSHGuide.html SSH Guide]] &lt;br /&gt;
&lt;br /&gt;
If something goes wrong, ask for help to support, with a maximum of details, to solve the problem.&lt;br /&gt;
&lt;br /&gt;
Once it works, the issue can be closed, and you can e.g. test downloading a module from tunnel repository :&lt;br /&gt;
&lt;br /&gt;
First create a tunnel with the command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh -2 -x -L 2401:localhost:2401 tunnel@openoffice.org&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then in a new window:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export CVSROOT=&amp;quot;:pserver:your_login@localhost:/cvs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
cvs login ( enter )&lt;br /&gt;
&lt;br /&gt;
(your password )&lt;br /&gt;
&lt;br /&gt;
mkdir TEST&lt;br /&gt;
&lt;br /&gt;
cd TEST&lt;br /&gt;
&lt;br /&gt;
cvs -z4 co -r SRC680_m205 vcl &lt;br /&gt;
&lt;br /&gt;
cd vcl &lt;br /&gt;
&lt;br /&gt;
cat CVS/Root  -&amp;gt; should indicate : your local repository&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ask for CVS access for all modules required ===&lt;br /&gt;
&lt;br /&gt;
Two steps : create an issue is mandatory because the concerned project is tools, and because people can have only ssh2 key without being [[DomainDeveloper]].&lt;br /&gt;
&lt;br /&gt;
==== Create an issue ====&lt;br /&gt;
&lt;br /&gt;
You must create an issue, described below  :&lt;br /&gt;
&lt;br /&gt;
Component : tools&lt;br /&gt;
&lt;br /&gt;
Sub Component : www&lt;br /&gt;
&lt;br /&gt;
Title : CVS access to all modules required&lt;br /&gt;
&lt;br /&gt;
Assigned to mh  +  CC for ericb and/or pjanik&lt;br /&gt;
&lt;br /&gt;
Present yourself quickly, and ask the access&lt;br /&gt;
&lt;br /&gt;
A project lead will confirm&lt;br /&gt;
&lt;br /&gt;
An admin will confirm this is ok, and set the issue to Fixed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;EXAMPLE&amp;#039;&amp;#039;&amp;#039; : [[http://www.openoffice.org/issues/show_bug.cgi?id=75494 CVS Access all modules for Etsushi Kato]]&lt;br /&gt;
&lt;br /&gt;
==== Verify ====&lt;br /&gt;
&lt;br /&gt;
Create the tunnel :&lt;br /&gt;
&lt;br /&gt;
open a terminal and type :&lt;br /&gt;
&lt;br /&gt;
ssh -2 -x -L 2401:localhost:2401 tunnel@openoffice.org&lt;br /&gt;
&lt;br /&gt;
once logged in, open a new terminal, and do ( for example ):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd $OOO_SRC_ROOT/&lt;br /&gt;
&lt;br /&gt;
source MacOSXPPCEnv.Set.sh  { source MacOSXX86Env.Set.sh for Mac Intel }&lt;br /&gt;
&lt;br /&gt;
cd vcl  ( for example )&lt;br /&gt;
&lt;br /&gt;
IMPORTANT : be sure vcl has been checked from tunnel, not from anoncvs ( cat CVS/Root will give you the answer )&lt;br /&gt;
&lt;br /&gt;
export CWS_WORK_STAMP=aquavcl01   # Only needed for working with [[EIS]], can change for a different CWS ;) &lt;br /&gt;
&lt;br /&gt;
cd aqua/source/gdi&lt;br /&gt;
&lt;br /&gt;
add your changes to your_file.cxx, then commit :&lt;br /&gt;
&lt;br /&gt;
cvs commit -m &amp;quot;#i75689# bla bla ... the reason of the modification(s)&amp;quot;  your_file.cxx  # The #i75689# is an issue number in the tracker&lt;br /&gt;
&lt;br /&gt;
cvs update&lt;br /&gt;
&lt;br /&gt;
If nothing is wrong, cvs update should not return M for your_file.cxx, means the commit is successfull.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
In case of problem, use the issue until it is fixed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;#039;&amp;#039;&amp;#039;Welcome aboard :)&amp;#039;&amp;#039;&amp;#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;2nd Mac porters meeting&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
This section has been moved to [[2nd Mac porters meeting]]&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;IRC Mac port meetings&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
This section has been moved to [[MacOSXPortMeetings]].&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Mac OS X (X11) Quality Assurance&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
This section has been moved to [[Mac OS X ( X11) Quality Assurance]]&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Mac OS X Implementing HIView and Carbon events&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
This section has been moved to [[Mac OS X Implementing HIView ]]&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Debug OpenOffice.org using XCode &amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
[[ MacOSX Debug OpenOffice.org using XCode]]&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Description of the Native Port problem&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
=== How does OpenOffice.org work on Mac OS X? ===&lt;br /&gt;
&lt;br /&gt;
Currently, on Mac OS X, OpenOffice.org uses X11, as &amp;quot;client&amp;quot;: X11 is a graphical server, coming from Unix world, and able to run under Linux, *BSD, Solaris, Mac OS X.&lt;br /&gt;
&lt;br /&gt;
 - X11 is run as an application, managed like other Apple applications.&lt;br /&gt;
 - All unix like applications are managed by X11, and from Aqua environment, only X11 is seen as only one applicatiion, &lt;br /&gt;
  even if other Unix/Linux (e.g.) applications are runing.&lt;br /&gt;
&lt;br /&gt;
OpenOffice.org asks X11 to display a window, waits for X11 acknowledgment, and OpenOffice.org displays the window. All transactions use the network, locally or not. the same mechanism is used for everything to be displayed.&lt;br /&gt;
&lt;br /&gt;
[[User:Ericb|Ericb]] 11:39, 3 June 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
=== Issues and known problems ===&lt;br /&gt;
&lt;br /&gt;
All events are managed by OpenOffice.org and X11, using the Xlib&lt;br /&gt;
&lt;br /&gt;
Only .ttf fonts type is currently available. Note: &amp;#039;&amp;#039;&amp;#039;system fonts are available &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
The rendering is made by X11, not by Mac OS X rendering engine.&lt;br /&gt;
&lt;br /&gt;
X11 and all its clients are seen as one application only: drag and drop protocol does not work because of that (solution: Pasteboard Manager)&lt;br /&gt;
&lt;br /&gt;
==== Other links ====&lt;br /&gt;
&lt;br /&gt;
http://wiki.services.openoffice.org/wiki/List_of_OpenOffice.org_Mac_OS_X_issues_and_problems#&lt;br /&gt;
&lt;br /&gt;
http://wiki.services.openoffice.org/wiki/Printing_problems_with_OpenOffice.org_2.0_for_Mac_OS_X#Reporting_printing_problems&lt;br /&gt;
&lt;br /&gt;
[[User:Ericb|Ericb]] 11:39, 3 June 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
== What do we have to do?==&lt;br /&gt;
&lt;br /&gt;
* (in progress) : Implement direct access to Apple graphical engine, using Apple API: Quartz2D/CoreGraphics (and replacing Xlib use)&lt;br /&gt;
&lt;br /&gt;
like: instantiate, manage events and threads for a graphical instance + all needed objects, drawing: manage all drawing cases&lt;br /&gt;
&lt;br /&gt;
* (in progress) : Implement native events management, using CarbonEventManager (replacing Xlib management)&lt;br /&gt;
&lt;br /&gt;
* (in progress) : Implement native font use, using Apple Type Server and ATSUI (for Unicode Imagery) (replacing X11 management)&lt;br /&gt;
&lt;br /&gt;
Work in progress: [[Mac OS X Porting - Native Fonts]]&lt;br /&gt;
&lt;br /&gt;
* Implement native sound, using QuickTime (replacing Java Media Framework): [[Mac OS X Porting - Native Audio and Video]]&lt;br /&gt;
&lt;br /&gt;
* Implement native Drag and drop, Implementing Pasteboard Manager: [[Mac OS X Porting - Native Drag and drop]]&lt;br /&gt;
&lt;br /&gt;
* (done experimental) Implement Native Filepicker&lt;br /&gt;
&lt;br /&gt;
* Implement Native Printing: current uses cups, but native printing is mandatory: [[Mac OS X Porting - Native_Printing]]&lt;br /&gt;
&lt;br /&gt;
* Implement Apple Spellchecker&lt;br /&gt;
&lt;br /&gt;
--[[User:Plipli|Plipli]] 09:27, 25 March 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Where is located the code to be modified?&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
Most of the changes are located in vcl (Visual Class Layer), for everything graphical, events, fonts, rendering and printing.&lt;br /&gt;
&lt;br /&gt;
Other, for sound and movies will be in avmedia (where the player is implemented in OpenOffice.org sources).&lt;br /&gt;
&lt;br /&gt;
For drag and drop, dtrans is concerned (Pasteboard Manager implementation)&lt;br /&gt;
&lt;br /&gt;
[FIXME]: Filepicker? Apple Spellchecker?&lt;br /&gt;
&lt;br /&gt;
[[User:Ericb|Ericb]] 11:39, 3 June 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;How will the new implementation be tested?==&lt;br /&gt;
&lt;br /&gt;
Currently, all openOffice.org code can be compiled without using the Xlib. but of course, a lot of features are missing,&lt;br /&gt;
&lt;br /&gt;
and the final package simply won&amp;#039;t work&lt;br /&gt;
&lt;br /&gt;
In vcl module&amp;quot;, a &amp;#039;&amp;#039;&amp;#039;toy&amp;#039;&amp;#039;&amp;#039; called svdem is built at buildtime. This binary is linked to libvcl* and so all new stuff can be tested.&lt;br /&gt;
&lt;br /&gt;
e.g. : draw anti-aliased lines works well. &lt;br /&gt;
&lt;br /&gt;
Everything implemented in aqua vcl code will be included in libvclplug_aqua, and svdem source code will contain a specific part to proceed tests.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;messagebox cleanup metadata&amp;quot; style=&amp;quot;border:1px solid blue;background-color:#B3FFF5;padding:7px;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;The magic is: when all needed features will work with svdem, it will work in the new version of OpenOffice.org !!&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[FIXME]: add more complete list of features to implement and test.&lt;br /&gt;
&lt;br /&gt;
== AquaVCL 01 cws ==&lt;br /&gt;
&lt;br /&gt;
[[http://qa.openoffice.org/issues/buglist.cgi?keywords=aqua Top 10 of Aqua issues]]&lt;br /&gt;
&lt;br /&gt;
[[Aquavcl01 tasks]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Changelog ===&lt;br /&gt;
&lt;br /&gt;
====Work in progresss : alpha 0.6 ====&lt;br /&gt;
&lt;br /&gt;
Started (19th March ) : &lt;br /&gt;
&lt;br /&gt;
Michael Sicotte proposed to investigate in timers, and continue [[http://www.openoffice.org/issues/show_bug.cgi?id=75228 Pavel&amp;#039;s work]] : objective is to replace obsolete code.  ( 23th March)&lt;br /&gt;
&lt;br /&gt;
[experimental] plipli proposed a patch for a new salframe implementation, using HIView + optionally compositing  (21th March )&lt;br /&gt;
&lt;br /&gt;
[commit scheduled] Michael Sicotte proposed a complete patch for invert() ( SAL_INVERT SAL_INVERT_50 and SAL_INVERT_TRACKFRAME )  (20th March )&lt;br /&gt;
&lt;br /&gt;
Tino proposed to work on code cleanup in salatsuifontutils.cxx, removing obsolete code &lt;br /&gt;
&lt;br /&gt;
ismael and michael work on invert() + drawAlphaRect() &lt;br /&gt;
&lt;br /&gt;
Damien started to work on drawEPS() &lt;br /&gt;
&lt;br /&gt;
plipli and ericb work on refresh&lt;br /&gt;
&lt;br /&gt;
==== alpha 0.5====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Top 10 Summary :  7 issues over 10 are fixed or very close to be : &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;time to code review, tracing, and search for memory leaks&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[done] Unicode input in salframe ( ekato ) ( 19th March )&lt;br /&gt;
&lt;br /&gt;
[experimental, works partially] beginning of HIView + HIComboxes works (text still missing)  (ericb + plipli)  ( 14th March ) &lt;br /&gt;
&lt;br /&gt;
[done] replace NewRgn() in salframe (ericb (11th March )&lt;br /&gt;
&lt;br /&gt;
[experimental, but very interesting] Improved native windows ( ismael ) ( 7th March )&lt;br /&gt;
&lt;br /&gt;
====alpha 0.4==== &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[Informative]&amp;#039;&amp;#039;&amp;#039; build runs with Leopard 9A377a ( fheckl ) ( 7th March ) &lt;br /&gt;
&lt;br /&gt;
Refresh screen issues  (plipli) (4th to 10th March )&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[informative]&amp;#039;&amp;#039;&amp;#039;  plipli announced  progress with refresh screen issues  ( 28th February )&lt;br /&gt;
&lt;br /&gt;
[experimental, not yet commited] Proxy configuration from system ( pjanik)  ( 28th February )&lt;br /&gt;
&lt;br /&gt;
[done] highlighted native button ( pjanik)  ( 27th February ) &lt;br /&gt;
&lt;br /&gt;
Native File Picker works ( fheckl  / pjanik )  ( 23th February  )&lt;br /&gt;
&lt;br /&gt;
====alpha 0.3====&lt;br /&gt;
&lt;br /&gt;
Cursor does appear -&amp;gt; invert() + setting a setBlinkTime value in UpdateSettings()  (pjanik /ericb ) &lt;br /&gt;
&lt;br /&gt;
[done] mirroring negative images (ismael) + DrawAlphaBitmap() + CreateWithMask()&lt;br /&gt;
&lt;br /&gt;
pjanik patch for Focus Events &lt;br /&gt;
&lt;br /&gt;
[done] scrolling works ( pjanik ) (17th February )&lt;br /&gt;
&lt;br /&gt;
[done ] carret works ( plipli) (17th February )&lt;br /&gt;
&lt;br /&gt;
[done] checkbuttons fix for checkmarks  (ericb) ( 17th February )&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[Informative]&amp;#039;&amp;#039;&amp;#039; Pavel Janik propose to solve offScreen buffer using HIView ( 17th February ) &lt;br /&gt;
&lt;br /&gt;
[experimental, never commited] patch for macosxrc.txt use + UpdateSettings() use in salframe.cxx ( ericb ( 16th February )&lt;br /&gt;
&lt;br /&gt;
Michael Sicotte joined the Team ( 15th February )&lt;br /&gt;
&lt;br /&gt;
invert() : first try  (ericb)   ( 13th february )&lt;br /&gt;
&lt;br /&gt;
====alpha 0.2====&lt;br /&gt;
&lt;br /&gt;
[12th February 2007 ]&lt;br /&gt;
&lt;br /&gt;
[done] calc does not start : bug identified by tino , first workaround (ericb)   [[http://www.openoffice.org/issues/show_bug.cgi?id=73691 issue 73691]]&lt;br /&gt;
&lt;br /&gt;
[done] bitmaps in native popup menus (ismael)  &lt;br /&gt;
&lt;br /&gt;
[done]  replace obsolete code for HandleWindowPaintEvent(), newRgn() .. etc  (ericb)  (12th February)&lt;br /&gt;
&lt;br /&gt;
correct salatslayout patch (plipli)  ( 11th February)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[Informative]&amp;#039;&amp;#039;&amp;#039;  Michel Renon proposed a summary about his work on fonts issues&lt;br /&gt;
&lt;br /&gt;
[patch] Pavel fixed several menu crashes (09th February )&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[Informative]&amp;#039;&amp;#039;&amp;#039; : Pavel posted a mail about several crashes origin &lt;br /&gt;
 &lt;br /&gt;
patch for radioboxes and checkboxes ( ericb ) (9th February)&lt;br /&gt;
&lt;br /&gt;
first complete patch for salatslayout.cxx ( plipli) ( 9th February )&lt;br /&gt;
&lt;br /&gt;
[done] most important crashes fixed ( pjanik)  ( 09th february )&lt;br /&gt;
&lt;br /&gt;
Modified baseline for 2.2. : Mac OS X10.4 -&amp;gt; Aqua will be 10.4 and 10.5 compatible only ( ericb)&lt;br /&gt;
&lt;br /&gt;
first try with multi line sallayout (plipli )  ( 08th February )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Damien Duportal joined the Team ( 7th February ) &lt;br /&gt;
&lt;br /&gt;
[done] scrollbar changes (ericb )   ( 4th February )&lt;br /&gt;
&lt;br /&gt;
====alpha 0.1====&lt;br /&gt;
&lt;br /&gt;
create Top 10 of issues before alpha  3rd February 2007 :  See : [[http://porting.openoffice.org/mac/news/2007/20070203toptenbeforealpha.html Top 10 of issues]]&lt;br /&gt;
&lt;br /&gt;
[experimental, not commited] patch for TPT() implementation (ericb)  ( 2nd February 2007 )&lt;br /&gt;
&lt;br /&gt;
Pavel Janik proposed to implement TransformProcessType() ( 2nd February 2007 )&lt;br /&gt;
&lt;br /&gt;
[not commited] implement UpdateSettings()   (ericb)  &lt;br /&gt;
&lt;br /&gt;
Pavel Janik resynchronized aquavel01 cws  with m202  ( 2nd February 2007 )&lt;br /&gt;
&lt;br /&gt;
====alpha 0.03====&lt;br /&gt;
&lt;br /&gt;
Michel Renon joined the Team (1st February )&lt;br /&gt;
&lt;br /&gt;
[done] fix checkbuttons and radiobuttons issues: offsets, redrawing of the check marks ( ericb) &lt;br /&gt;
&lt;br /&gt;
[done] fix scrollbar buttons (implement correct methods to retrieve dimensions)&lt;br /&gt;
&lt;br /&gt;
[done] implement mapfiles for Mac OS X (Stephan Bergmann, Daniel Boelzle, Tino Rachui , Pavel Janik)&lt;br /&gt;
&lt;br /&gt;
====alpha 0.02====&lt;br /&gt;
&lt;br /&gt;
[done] modify libsalsystools.dylib to be correctly loaded with the bundle  (ericb, + pjanik)&lt;br /&gt;
&lt;br /&gt;
[done] add mouse drag events  ( pjanik )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====alpha 0.01====&lt;br /&gt;
&lt;br /&gt;
[done] add new feature for Aqua windows, to allow QuickTime player use( mox )&lt;br /&gt;
&lt;br /&gt;
[done] replace obsolete code in salframe.cxx with (ericb)&lt;br /&gt;
&lt;br /&gt;
[done] fix correct size for main window (GetOptimaWindowSize()  ) (ericb)&lt;br /&gt;
&lt;br /&gt;
[done] fix alpha channel in pixmaps (ismael)&lt;br /&gt;
&lt;br /&gt;
====alpha 0.0====&lt;br /&gt;
&lt;br /&gt;
[done] pushbutton where not correctly drawn (ericb)&lt;br /&gt;
&lt;br /&gt;
[done] fix missing mouse events  (pjanik)&lt;br /&gt;
&lt;br /&gt;
[done] fix nRepeat in text entry  (ssa)&lt;br /&gt;
&lt;br /&gt;
2nd Mac porters Meeting&lt;br /&gt;
&lt;br /&gt;
===Work in progress ===&lt;br /&gt;
&lt;br /&gt;
URGENT :&lt;br /&gt;
&lt;br /&gt;
Top of issues causing crashes : event issue when tips is enabled causes crashes ( well known window / handler  / window desctructor / event loop bug )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Salatsuifontutils :  replace old code, track leaks : tino&lt;br /&gt;
&lt;br /&gt;
[done] Bitmaps : ( isma87) &lt;br /&gt;
&lt;br /&gt;
[running]  Crashes : (tino, pjanik, ericb, isma87, plipli )&lt;br /&gt;
&lt;br /&gt;
[???] Drag and drop :   (vijay)&lt;br /&gt;
&lt;br /&gt;
[???] Printing   (ybart)  &lt;br /&gt;
&lt;br /&gt;
Florian Heckl proposed a subject for Google Summer of Code about native printing&lt;br /&gt;
&lt;br /&gt;
Drawing/ windowing ( plipli / ericb ) -&amp;gt; mainly refresh &lt;br /&gt;
&lt;br /&gt;
[done] Implement cursor &lt;br /&gt;
&lt;br /&gt;
[started] Native Controls   (ericb) &lt;br /&gt;
&lt;br /&gt;
[work in progress] partial multiline sallayout  (plipli )&lt;br /&gt;
&lt;br /&gt;
To do : &lt;br /&gt;
&lt;br /&gt;
(started, Oliver) - modify the tree to make the bundle start without hack ( issue fixed during buildtime) &lt;br /&gt;
&lt;br /&gt;
(started, Florian Heckl)  verify Native FilePicker implementation ( works , tested in Hamburg  )&lt;br /&gt;
&lt;br /&gt;
[done] Ismael Merzaq)  implement blit functions in salgdi  ( important fix:  probably apha version to be tested once done) &lt;br /&gt;
&lt;br /&gt;
[done] Sebastien Plisson- update the missing functions list ( fonts ... ask hdu &amp;amp; cl&lt;br /&gt;
&lt;br /&gt;
[started] ericb, Mox Soini, Sebastien Plisson, Tino Rachui, Pavel janik continue to replace obsolete code&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
fix crashes with menus  (started : tino )&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Sort of documentation about VCL around Native Mac OS X port&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Do we really need to understand how it works? ;-)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vcl content:&lt;br /&gt;
&lt;br /&gt;
ls -laR | wc -l&lt;br /&gt;
  1750&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; Uff 1750 files to analyse :-/&lt;br /&gt;
&lt;br /&gt;
Our purpose is to describe the vcl organisation. The content of vcl is so important, that at the begining, the content will looks a bit confused. e.g. class names ..etc have nothing to do, only description with words and sense, but this will need some time before we can understand everything.&lt;br /&gt;
&lt;br /&gt;
How analyse with more efficiency? After some months to anlalyse &amp;#039;&amp;#039;&amp;#039;&amp;quot;horizontaly&amp;quot;&amp;#039;&amp;#039;&amp;#039;, it appears that list all the content of a directory is not the solution. Of course, we learned a lot, but we now have to complete with &amp;#039;&amp;#039;&amp;#039;&amp;quot;orthogonal&amp;quot;&amp;#039;&amp;#039;&amp;#039; method (compared to the previous one). The first method wasn&amp;#039;t obviously not the good/best way to describe vcl.&lt;br /&gt;
 &lt;br /&gt;
[FIXME] a different approach (will ask confirmation to Philipp Lohman), could be a description of how it work in runtime. First define what an instance is, a frame, and what exactly is concerned by such &amp;quot;objects&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
With that, we can write a list of different objects all using the same scheme: empty boxes (means pure virtual methods and classes in generic libvvcl), really implemented in the specific part, and finally, the API &amp;quot;encapsulated&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The most difficult is to see where the API is used. But for all the parts, this is the same.&lt;br /&gt;
&lt;br /&gt;
Finally, &amp;#039;&amp;#039;&amp;#039;what is important is the design of vcl&amp;#039;&amp;#039;&amp;#039;. Which &amp;#039;&amp;#039;&amp;#039;patterns&amp;#039;&amp;#039;&amp;#039; are used? What are the dependencies, how works the stack for the events, how works the scheduler, the timers too is very important, even fundamental for Aqua implementation. Will have a look at gsl mailing list, and other resources. Probably everything is already (randomly) written somewhere.&lt;br /&gt;
&lt;br /&gt;
=== VCL organisation ===&lt;br /&gt;
&lt;br /&gt;
Thank&amp;#039;s to Philipp Lohmann for this short, but precise description:&lt;br /&gt;
&lt;br /&gt;
Basically vcl is divided in the system dependent and the system independent part. The interface between these two is mostly the Sal interface (every interface name Sal*: SalInstance, SalFrame, SalGraphics, SalPrinter, etc.).&lt;br /&gt;
&lt;br /&gt;
SalInstance is a factory that can create all the other abstracted interfaces of the system dependent part. It also provides the main loop SalInstance::Yield()&lt;br /&gt;
&lt;br /&gt;
SalFrame abstracts any kind of system window.&lt;br /&gt;
&lt;br /&gt;
SalVirtualDevice abstracts an offscreen window (e.g. a Pixmap on X11)&lt;br /&gt;
&lt;br /&gt;
SalPrinter and SalInfoPrinter abstract the system print queues where SalInfoPrinter is for querying and SalPrinter for actual printing.&lt;br /&gt;
&lt;br /&gt;
SalGraphics is an interface produced by either SalFrame, SalVirtualDevice or SalPrinter which is used for actual drawing operations (text, bitmaps, vector graphics)&lt;br /&gt;
&lt;br /&gt;
SalSound is for sound playing.&lt;br /&gt;
&lt;br /&gt;
SalBitmap provides memory for bitmap graphics as well as methods converting this memory to a system handle (e.g. a Pixmap on X11).&lt;br /&gt;
&lt;br /&gt;
SalOpenGL provides OpenGL functionality if available.&lt;br /&gt;
&lt;br /&gt;
SalTimer is an interface for periodically triggering the event queue (to timer implementation).&lt;br /&gt;
&lt;br /&gt;
SalI18NImeStatus handles how the status window of an Input Method Editor (IME) should display (this is mainly X11 specific).&lt;br /&gt;
&lt;br /&gt;
SalSystem has some system specific methods that did not belong anywhere else:-)&lt;br /&gt;
&lt;br /&gt;
Of all these there interfaces is at least one implementation per system (Windows, X11 or Mac). The Unix implementation also has a plugin concept to allow for integration of different native toolkits (currently gtk and Qt) which became necessary for the implementation of Native Widget Framework (NWF) to display controls like their normal desktop counterparts.&lt;br /&gt;
&lt;br /&gt;
Basically the independent part (what is beneath vcl/source directory) has generic methods for drawing, window handling and stuff which it brings into a suitable form and then delegates to the system specific implementation (located beneath vcl/win for Windows and vcl/unx for the X11 platforms).&lt;br /&gt;
&lt;br /&gt;
[[User:Ericb|Ericb]] 16:12, 1 July 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
===Sub-directories description ===&lt;br /&gt;
&lt;br /&gt;
==== &amp;#039;&amp;#039;&amp;#039;Organisation of vcl directories&amp;#039;&amp;#039;&amp;#039; ====&lt;br /&gt;
&lt;br /&gt;
[[Image:aquavcl_organisation_complete_02.jpg]]&lt;br /&gt;
&lt;br /&gt;
==== &amp;#039;&amp;#039;&amp;#039;Directories in vcl. Short description&amp;#039;&amp;#039;&amp;#039; ====&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; aqua &amp;#039;&amp;#039;&amp;#039;: The name Aqua means Apple look and feel, and is well known as [http://developer.apple.com/documentation/UserExperience/Conceptual/OSXHIGuidelines/XHIGIntro/chapter_1_section_1.html Aqua Human Interface Guidelines]. This look and feel means Mac OS X. The work was begun by (probably) P. luby, Dan Williams Herbert Duerr (most of fonts stuff) and Ed Peterlin. Currently in ruin, this directory does contain a lot of ideas to investigate. The most important part of needed changes for native version (3.0) will be done inside aqua dir inc: does contain all vcl relative includes [PART1]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; prj &amp;#039;&amp;#039;&amp;#039;: Does contain build.lst and d.lst build.lst give us dependencies: probably a lot for vcl, build 98th module over ~148. Everything graphical depends in vcl. &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; qa &amp;#039;&amp;#039;&amp;#039; does contain all quality assurancy stuff&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;source&amp;#039;&amp;#039;&amp;#039;: the most important:-) This directory contains common sources for all architectures and OS. Mainly: Windows, Unix: Linux , Mac OS X (X11), Solaris, including generic, kde and gtk plugins, and Aqua (Mac OS X without X11, work currently in progress). &lt;br /&gt;
&lt;br /&gt;
Depending on the OS and the architecture, binaries are built or not.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; test &amp;#039;&amp;#039;&amp;#039;: This directory does contain all the needed stuff for tests. As example, in qa/testdocuments, you&amp;#039;ll find three documents (one writer, one calc and one impress) for tests purpose. &lt;br /&gt;
Other available tests are about memcheck and persistent window state. &lt;br /&gt;
 &lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; unx &amp;#039;&amp;#039;&amp;#039;: this directory does contain all unixes stuff. We have to understand what is inside to implement aqua port. For example, a lot of classes/strutures and objects use Xlib calls we have to replace with Carbon/Cocoa call (at least at first time) for Mac OS X native port.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; win &amp;#039;&amp;#039;&amp;#039;: Doing Mac OS X native port, I first believed this directory was not interesting for us, but I was wrong: OpenOffice.org roots are inside this directory, and a lot of comments and resources are inside. Mainly interesting if Carbon is used.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;workben&amp;#039;&amp;#039;&amp;#039;: Does contain a toy called &amp;quot;svdem&amp;quot;. svdem is a binary, used for new implementations. For example, actual aqua development uses svdem intensively, to verify all important properties we need: &lt;br /&gt;
&lt;br /&gt;
- display a window first (al least ...:)) &lt;br /&gt;
&lt;br /&gt;
- close cleanly this window&lt;br /&gt;
&lt;br /&gt;
- display a point&lt;br /&gt;
&lt;br /&gt;
- trace a line&lt;br /&gt;
&lt;br /&gt;
- trace an area &lt;br /&gt;
&lt;br /&gt;
- superpose two areas doing some important graphical operations, (like xor),&lt;br /&gt;
&lt;br /&gt;
- display a character&lt;br /&gt;
&lt;br /&gt;
- display a menu. &lt;br /&gt;
&lt;br /&gt;
- intercept events correctly.&lt;br /&gt;
&lt;br /&gt;
[FIXME] add more tests&lt;br /&gt;
&lt;br /&gt;
[[User:Ericb|Ericb]] 13:21, 3 June 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Naming convention&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
* Class names start with upper case letters, to improve readability.&lt;br /&gt;
&lt;br /&gt;
* Implemented Class names are derived from the virtual classes but can of course take arbitrary names.&lt;br /&gt;
To increase readability, it&amp;#039;s recommended to closely follow the base class name.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Impl prefix: means Implementation details&amp;#039;&amp;#039;&amp;#039;. The concerned class or method or function is not used outside of this module, so no external code (or other libraries) can see it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[ Events types using Carbon API (Mac OS X): ]]&amp;#039;&amp;#039;&amp;#039; A lot of events have to be managed in runtime. Here is a short description&lt;br /&gt;
&lt;br /&gt;
- do not freeze because bad event loops&lt;br /&gt;
&lt;br /&gt;
- event types implementation: currently, they are defined in vcl/aqua/inc/aquavclevents.hxx&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Apart: exact sense of hedabu? -&amp;gt; [FIXME] as far as I understood it: it is like &amp;quot;copy&amp;quot; to deliver software into the solver, with extra magic. The header files for example are manipulated so paths need not be exact. &amp;quot;headabu&amp;quot; is supposed to disappear little by little.&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;What do we have to build in vcl?&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
Two libraries, corresponding ressources (localized) and a toy so called « svdem »&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Common part&amp;#039;&amp;#039;&amp;#039;: &lt;br /&gt;
&lt;br /&gt;
in grey on right. The result will be a non architecture dependant library, built in all cases: for instance, libvcl680mxi.dylib on Mac Intel.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Specific part  &amp;quot; a plugin &amp;quot; &amp;#039;&amp;#039;&amp;#039;: &lt;br /&gt;
&lt;br /&gt;
Light yellow: aqua part will only concern Mac OS X (non X11) the name will probably be libvcl_aqua680mxi.dylib &lt;br /&gt;
&lt;br /&gt;
As you can see, win means windows part, in blue&lt;br /&gt;
&lt;br /&gt;
For Unix build (Linux, Solaris or current Mac OS X X11), in purple.&lt;br /&gt;
&lt;br /&gt;
Result will be:&lt;br /&gt;
&lt;br /&gt;
libvclplug_PLUGIN680mxi.DLLSUFFIX , where PLUGIN can be iether gen (generic) or gtk (using gtk+) or kde (using qt), and DLLSUFFIX can be either .so (linux) or .dylib (Mac OS X) ...etc (I&amp;#039;m not sure for other cases).&lt;br /&gt;
&lt;br /&gt;
Example: libvcl680mxi.dylib and libvclplug_aqua680mxi.dylib&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;In runtime&amp;#039;&amp;#039;&amp;#039;, libvclplug_aqua will be linked to libvcl680. the first one will contain the real implementation (respecting the API, e.g. Carbon) while the generic libvcl will only contain pure virtual methods ...etc like &amp;quot;empty boxes&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Current Aqua content ===&lt;br /&gt;
&lt;br /&gt;
A more complete description of aqua (Mac OS X / no X11 specific): [[Image:Vcl_aqua_organisation_02_tree.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==EXISTING objects to build in aqua==&lt;br /&gt;
&lt;br /&gt;
===Sal APP &amp;quot;everything application&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
[FIXME] add all objects descriptions&lt;br /&gt;
&lt;br /&gt;
==== saldata ====&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Defined in plugin exclusively&amp;#039;&amp;#039;&amp;#039; (i.e. for headers)&lt;br /&gt;
&lt;br /&gt;
Unix: unx/source/app/saldata.cxx (header in unx/inc)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Aqua: aqua/source/app/saldata.cxx (header in win/inc)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Windows: win/source/app/saldata.cxx (header in aqua/inc)&lt;br /&gt;
&lt;br /&gt;
* Role: saldata contains various kind of data used by the implementation for the concerned platform. &amp;#039;&amp;#039;&amp;#039;It is a bunch of global data collections reserved for the platform&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
It is just completely platform dependent, and nobody except this plugin can see it.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Saldata is something like a &amp;quot;second sal&amp;quot;, but providing an abstraction regarding windowing and graphics&amp;#039;&amp;#039;&amp;#039;, while SAL module provides an abstraction more Operating System oriented) &lt;br /&gt;
&lt;br /&gt;
e.g. : have a look at XRequest array in vcl/unx/source/app/saldata.cxx =&amp;gt; all calls are for Xlib (X11).  Ok, useless there, but interesting:-)&lt;br /&gt;
&lt;br /&gt;
[FIXME]: use Windows implementation could be a good starting point. Nothing is the same, but the current aquavcl cws uses similar objects, and it works very correctly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
saldatax.cxx uses classes SalInstance, SalObject, SalFrame, SalVirtualDevice, SalPrinter and fontList.&lt;br /&gt;
&lt;br /&gt;
Current list of possible objects who can be instantiated/released:&lt;br /&gt;
&lt;br /&gt;
structure SalData: does contain pointers on all kind of objects from other classes used in saldata.&lt;br /&gt;
&lt;br /&gt;
inline functions: [FIXME]: complete the description&lt;br /&gt;
&lt;br /&gt;
- SetSalData:&lt;br /&gt;
- GetSalData:&lt;br /&gt;
- GetAppSalData:&lt;br /&gt;
&lt;br /&gt;
==== salinst ====&lt;br /&gt;
&lt;br /&gt;
=&amp;gt; implemented in vcl/aqua/source/app/salinst.cxx&lt;br /&gt;
&lt;br /&gt;
Role: &lt;br /&gt;
&lt;br /&gt;
* get environment, mutexes, instantiate AquaSalInstance (Ctor, Dtor),&lt;br /&gt;
&lt;br /&gt;
* instantiates/releases a lot of other objects using Get() / CreateObject() / DestroyObject() methods.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Current list of possible objects who can be instantiated/released:&lt;br /&gt;
&lt;br /&gt;
 * VirtualDevice [FIXME]: exact role?&lt;br /&gt;
&lt;br /&gt;
 *Printer  &lt;br /&gt;
&lt;br /&gt;
- GetDefaultPrinter/ CreatePrinter() / DestroyPrinter - what a name ;-) -&lt;br /&gt;
&lt;br /&gt;
- InfoPrinter (Get/Create/Delete)&lt;br /&gt;
&lt;br /&gt;
- PrinterQueue (DeletePrinterQueueInfo / GetPrinterQueueInfo / GetPrinterQueueState)&lt;br /&gt;
&lt;br /&gt;
 * System (Create / Delete) [FIXME]: what means system here?&lt;br /&gt;
&lt;br /&gt;
 * Events: &lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::SetEventCallback()&lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::SetErrorEvenCallback()&lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::GetConnectionIdentifier()&lt;br /&gt;
&lt;br /&gt;
 * Menu / MenuItem: &lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::CreateMenu() / same for DestroyMenu()&lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::CreateMenuItem / same DestroyMenuItem()&lt;br /&gt;
&lt;br /&gt;
 * Sound: &lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::CreateSalSound()  =&amp;gt; object to a pointer of SalSound type&lt;br /&gt;
&lt;br /&gt;
Note: AquaSalInstance::DestroySalSound is not implemented (?)&lt;br /&gt;
&lt;br /&gt;
 * Timer: CreateTimer() /&lt;br /&gt;
&lt;br /&gt;
AquaSalInstance:: DestroyTimer() is not yet implemented (?)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Class MacImeStatus: inherits of SalI18NImeStatus&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; only there to see if there is a window to toggle into menubar [FIXME]??&lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::CreateI18NImeStatus(): instantiates MacImeStatus&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;For futher informations, see: &amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;[[Content of salinst.cxx]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
([[User:Ericb|Ericb]] 16:11, 20 May 2006 (CEST) )&lt;br /&gt;
&lt;br /&gt;
==== salmain ====&lt;br /&gt;
&lt;br /&gt;
Role: if possible, runs the standard vcl application code SVMain()&lt;br /&gt;
&lt;br /&gt;
([[User:Ericb|Ericb]] 16:15, 20 May 2006 (CEST))&lt;br /&gt;
&lt;br /&gt;
==== salsound ====&lt;br /&gt;
&lt;br /&gt;
==== salsys ====&lt;br /&gt;
&lt;br /&gt;
==== saltimer ====&lt;br /&gt;
&lt;br /&gt;
=== Sal GDI (everything Graphical Display Interface) ===&lt;br /&gt;
&lt;br /&gt;
====salgdinativewidgets====&lt;br /&gt;
&lt;br /&gt;
[[native controls]]&lt;br /&gt;
&lt;br /&gt;
==== salatslayout ====&lt;br /&gt;
&lt;br /&gt;
==&amp;gt; implemented in vcl/aqua/source/gdi/salatslayout.cxx&lt;br /&gt;
&lt;br /&gt;
- Handle text layouting :&lt;br /&gt;
&lt;br /&gt;
    * Use ATSUI (ATSUCreateTextLayoutFromPtr) to layout the text unicode char buffer&lt;br /&gt;
    * Use ATSUI (ATSU..) to get informations about glyphs&lt;br /&gt;
    * Populate different arrays (mpGlyph2Chars, mpChars2Glyph, mpCharsWidths, mpGlyphAdvances)&lt;br /&gt;
      that are used in various methods.&lt;br /&gt;
&lt;br /&gt;
==== salatsuiutils ====&lt;br /&gt;
&lt;br /&gt;
==== salfontutils ====&lt;br /&gt;
&lt;br /&gt;
==== salmathutils ====&lt;br /&gt;
&lt;br /&gt;
==== sal bmp ====&lt;br /&gt;
&lt;br /&gt;
==== salvd ====&lt;br /&gt;
&lt;br /&gt;
==== salpixmaputils====&lt;br /&gt;
&lt;br /&gt;
==== salprn ====&lt;br /&gt;
&lt;br /&gt;
====salrectangle====&lt;br /&gt;
&lt;br /&gt;
==== salvd ====&lt;br /&gt;
&lt;br /&gt;
=== Sal Window===&lt;br /&gt;
&lt;br /&gt;
==== salframe ====&lt;br /&gt;
Documentation in progress, from damiend :&lt;br /&gt;
[[User:Damiend|Damiend page]]&lt;br /&gt;
&lt;br /&gt;
====salobj====&lt;br /&gt;
&lt;br /&gt;
== TO BE IMPLEMENTED (missing in Aqua)==&lt;br /&gt;
&lt;br /&gt;
===Audio===&lt;br /&gt;
&lt;br /&gt;
====audioconvert====&lt;br /&gt;
 (obsolete?) &lt;br /&gt;
&lt;br /&gt;
====devaudio====&lt;br /&gt;
(obsolete?)&lt;br /&gt;
&lt;br /&gt;
====native sound====&lt;br /&gt;
&lt;br /&gt;
====salimpsound====&lt;br /&gt;
&lt;br /&gt;
====vsound====&lt;br /&gt;
&lt;br /&gt;
===i18n===&lt;br /&gt;
&lt;br /&gt;
===keysymnames===&lt;br /&gt;
&lt;br /&gt;
===saldisp===&lt;br /&gt;
&lt;br /&gt;
===sm===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[FIXME]: is session manager usefull?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Native Controls&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
====Scrollbar====&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Works as expected&amp;#039;&amp;#039;&amp;#039;. The most important work is done&lt;br /&gt;
&lt;br /&gt;
See : [[Mac_OS_X_Porting_-_Native_Controls#ScrollBar]]&lt;br /&gt;
&lt;br /&gt;
====DrawThemeButton() documentation====&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Started&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
See : [[Mac_OS_X_Porting_-_Native_Controls#ComboBox]]&lt;br /&gt;
&lt;br /&gt;
Started&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DrawThemeButton&lt;br /&gt;
Draws a button.&lt;br /&gt;
&lt;br /&gt;
OSStatus DrawThemeButton (&lt;br /&gt;
   const Rect * inBounds,&lt;br /&gt;
   ThemeButtonKind inKind,&lt;br /&gt;
   const ThemeButtonDrawInfo * inNewInfo,&lt;br /&gt;
   const ThemeButtonDrawInfo * inPrevInfo,&lt;br /&gt;
   ThemeEraseUPP inEraseProc,&lt;br /&gt;
   ThemeButtonDrawUPP inLabelProc,&lt;br /&gt;
   UInt32 inUserData&lt;br /&gt;
);&lt;br /&gt;
Parameters&lt;br /&gt;
inBounds&lt;br /&gt;
A pointer to a structure of type Rect. Pass a rectangle specifying the boundary of the button, in local coordinates.&lt;br /&gt;
&lt;br /&gt;
inKind&lt;br /&gt;
A value of type ThemeButtonKind. Pass a constant specifying the type of button to draw. &lt;br /&gt;
See “Theme Buttons” for descriptions of possible values.&lt;br /&gt;
&lt;br /&gt;
inNewInfo&lt;br /&gt;
A pointer to a structure of type ThemeButtonDrawInfo. Before calling DrawThemeButton, &lt;br /&gt;
set the structure to contain the new state, value, and adornment for the button. &lt;br /&gt;
DrawThemeButton uses the information passed in the inNewInfo and inPrevInfo parameters&lt;br /&gt;
to apply transitional animation or sound effects as the button state changes, if such are &lt;br /&gt;
specified under the current theme.&lt;br /&gt;
&lt;br /&gt;
inPrevInfo&lt;br /&gt;
A pointer to a structure of type ThemeButtonDrawInfo. If the button state is changing,&lt;br /&gt;
set the structure to contain the previous state, value, and adornment for the button, &lt;br /&gt;
to allow DrawThemeButton to apply any transitional effects. If the button state is not &lt;br /&gt;
changing, you can pass NULL.&lt;br /&gt;
&lt;br /&gt;
inEraseProc&lt;br /&gt;
A value of type ThemeEraseUPP. If you have a custom background, use this parameter to pass&lt;br /&gt;
a universal function pointer to an application-defined function such as that described in &lt;br /&gt;
ThemeEraseProcPtr. DrawThemeButton calls this function to erase the background before drawing&lt;br /&gt;
 the button. If you pass NULL, DrawThemeButton&amp;#039;s default behavior is to erase the background&lt;br /&gt;
 for you.&lt;br /&gt;
&lt;br /&gt;
inLabelProc&lt;br /&gt;
A value of type ThemeButtonDrawUPP. If you pass a universal function pointer to an &lt;br /&gt;
application-defined function such as that described in ThemeButtonDrawProcPtr, DrawThemeButton&lt;br /&gt;
 calls that function to draw the label of the button. If you pass NULL, no label is drawn.&lt;br /&gt;
&lt;br /&gt;
inUserData&lt;br /&gt;
An unsigned 32-bit integer. Provide any data to be passed in to the callback functions specified in &lt;br /&gt;
the inLabelProc and inEraseProc parameters. Pass NULL if you do not wish to provide any data.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
A result code. See “Appearance Manager Result Codes”.&lt;br /&gt;
&lt;br /&gt;
Discussion&lt;br /&gt;
The DrawThemeButton function draws a theme-compliant button. If a ThemeEraseProcPtr is &lt;br /&gt;
specified in the inEraseProc parameter, DrawThemeButton uses that function to erase the &lt;br /&gt;
background of the button before drawing the button. After the button is drawn, if a&lt;br /&gt;
ThemeButtonDrawProcPtr is specified in the inLabelProc parameter, DrawThemeButton calls&lt;br /&gt;
that function to draw the button’s label.&lt;br /&gt;
&lt;br /&gt;
Note that DrawThemeButton also draws any appearance adornments for the button and that these&lt;br /&gt;
can extend beyond the button’s basic bounding rectangle, as specified in the inBounds parameter,&lt;br /&gt;
and may be of variable shape. You may therefore wish to call the function&lt;br /&gt;
GetThemeButtonBackgroundBounds to obtain the actual rectangle containing the pixels belonging&lt;br /&gt;
to a button under the current theme.&lt;br /&gt;
&lt;br /&gt;
Version Notes&lt;br /&gt;
This function is available with Appearance Manager 1.1 and later.&lt;br /&gt;
&lt;br /&gt;
Availability&lt;br /&gt;
Available in CarbonLib 1.0 and later when Appearance 1.1 or later is present.&lt;br /&gt;
Available in Mac OS X 10.0 and later.&lt;br /&gt;
Declared In&lt;br /&gt;
Appearance.h&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====HIComboBoxCreate() documentation====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HIComboBoxCreate&lt;br /&gt;
Creates a combo box control.&lt;br /&gt;
&lt;br /&gt;
OSStatus HIComboBoxCreate (&lt;br /&gt;
   const HIRect* boundsRect,&lt;br /&gt;
   CFStringRef text,&lt;br /&gt;
   const ControlFontStyleRec* style,&lt;br /&gt;
   CFArrayRef list,&lt;br /&gt;
   OptionBits inAttributes,&lt;br /&gt;
   HIViewRef* outComboBox&lt;br /&gt;
);&lt;br /&gt;
Parameters&lt;br /&gt;
boundsRect&lt;br /&gt;
The bounding box of the control.&lt;br /&gt;
&lt;br /&gt;
text&lt;br /&gt;
The default text in the editable portion of the control. Can be NULL.&lt;br /&gt;
&lt;br /&gt;
style&lt;br /&gt;
The font style of the both editable text and the text in the disclosure list. Can be NULL.&lt;br /&gt;
&lt;br /&gt;
list&lt;br /&gt;
The default values available in the disclosure list. Can be NULL.&lt;br /&gt;
&lt;br /&gt;
inAttributes&lt;br /&gt;
The default attributes of the combo box. For possible values, see “Combo Box Attributes”.&lt;br /&gt;
&lt;br /&gt;
outComboBox&lt;br /&gt;
On exit, a pointer to a reference for the new control.&lt;br /&gt;
&lt;br /&gt;
Discussion&lt;br /&gt;
The combo box can be used in compositing mode, as well as traditional Control Manager mode.&lt;br /&gt;
When created, this view is invisible. To see the view, you must show the view by calling HIViewSetVisible.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== What is used for Linux, Windows, Mac OS X ...build ? ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[Description of the dependencies]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[Windows]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[MacOS X]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[Linux]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[Solaris]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Content of Aqua ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[Click here to see the complete list]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Content of vcl/inc&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Notes: &lt;br /&gt;
&lt;br /&gt;
1) Where to find includes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;foo/bar.hxx&amp;gt; means you can find bar.hxx in the foo module. The new style file is foo/inc/foo/bar.hxx, old style is foo/inc/bar.hxx and sometimes the file is somewhere else in the tree or generated. The deliver process copies/generates the file into solver at solver/680/build_type/inc/foo. Good for fixing broken builds. ;-)&lt;br /&gt;
&lt;br /&gt;
2) &lt;br /&gt;
suffix .h (for C calls or first version?) or .hxx (C++) &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;A) Family of includes&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
Looking more closely at the list brings to the fore (expression from dictionary ;-) ) that include names are&lt;br /&gt;
informatives. Most of the time, the name gives the function/role.&lt;br /&gt;
What is interesting is the files with name begining with &amp;quot;sal&amp;quot;. sal means System Abstraction Layer + include&amp;#039;s function (or explicit name). &lt;br /&gt;
&lt;br /&gt;
Partial list, for example:&lt;br /&gt;
&lt;br /&gt;
salatype.hxx&lt;br /&gt;
&lt;br /&gt;
salbmp.hxx&lt;br /&gt;
&lt;br /&gt;
salctrlhandle.hxx&lt;br /&gt;
&lt;br /&gt;
salctype.hxx&lt;br /&gt;
&lt;br /&gt;
salframe.hxx&lt;br /&gt;
&lt;br /&gt;
salgdi.hxx&lt;br /&gt;
&lt;br /&gt;
salgeom.hxx&lt;br /&gt;
&lt;br /&gt;
sallayout.hxx (main header for fonts services)&lt;br /&gt;
...&lt;br /&gt;
salmenu&lt;br /&gt;
salnativewidgets&lt;br /&gt;
...etc&lt;br /&gt;
&lt;br /&gt;
Other important families are &amp;quot;sv&amp;quot; and &amp;quot;uno&amp;quot; or &amp;quot;win&amp;quot; (window) prefixed. sal family will be analysed apart.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;B) Includes of includes&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Some includes are more important than other. To prove this, just have a look is sufficient: some are always needed, and some more rarely.&lt;br /&gt;
&lt;br /&gt;
To verify, a simple test to do in vcl/inc:&lt;br /&gt;
&lt;br /&gt;
egrep -H &amp;quot;#include&amp;quot; ./* | wc -l  gives me 681 lines ! And some of them are the same...&lt;br /&gt;
&lt;br /&gt;
To know more, the precedent command line can be modified to make appear the numerous call &lt;br /&gt;
to the same includes files.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
egrep -H &amp;quot;#include&amp;quot; ./* | cut -d&amp;quot;#&amp;quot; -f2 | sort &amp;gt; liste.txt&lt;br /&gt;
&lt;br /&gt;
The content of liste.txt is explicit: dllapi.h, sv.h and some other are very important, while some other includes are only one or two times used. We can see too that vos includes are numerous, even if vos is deprecated**&lt;br /&gt;
&lt;br /&gt;
 **see http://wiki.services.openoffice.org/wiki/Source_code_directories&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I&amp;#039;m nearly sure that a complete analysis of just this result will give us a lot of information.&lt;br /&gt;
&lt;br /&gt;
I propose to change the order of analysis starting with dllapi.h and sv.h.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[to be continued]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;B1) &amp;quot;sal&amp;quot; includes family&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
[[salinst.hxx]] This seems to be the main include file&lt;br /&gt;
&lt;br /&gt;
[[salatype.hxx]]&lt;br /&gt;
&lt;br /&gt;
[[salctrlhandle.hxx]]&lt;br /&gt;
&lt;br /&gt;
[[salctype.hxx]]&lt;br /&gt;
&lt;br /&gt;
[[salframe.hxx]]&lt;br /&gt;
&lt;br /&gt;
[[salgdi.hxx]]&lt;br /&gt;
&lt;br /&gt;
[[salgeom.hxx]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[ sallayout.hxx ]]&amp;#039;&amp;#039;&amp;#039; &amp;lt;-- see Native Fonts implementation&lt;br /&gt;
&lt;br /&gt;
[[salgtype.hxx]]&lt;br /&gt;
&lt;br /&gt;
[[vcl/inc/salobj.hxx]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;B2) Classicals includes&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
file: abstdlg.hxx [ means abstract dialog ]&lt;br /&gt;
&lt;br /&gt;
This includes does contain the following classes definitions:&lt;br /&gt;
&lt;br /&gt;
[FIXME] : choose a precise presentation template for classes &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
VclAbstractDialog,&lt;br /&gt;
&lt;br /&gt;
VclAbstractTerminateDialog, &lt;br /&gt;
&lt;br /&gt;
VclAbstractRefreshableDialog,&lt;br /&gt;
 &lt;br /&gt;
VclAbstractDialogFactory, &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
uses &amp;lt;tools/solar.h&amp;gt; , &amp;lt;tools/string.hxx&amp;gt; + &lt;br /&gt;
&lt;br /&gt;
&amp;quot;dllapi.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Note : dllapi.h is very interesting because when we have to find (for example) a library suffix, SAL_DLLEXTENSSION can replace all suffixes (every OS&amp;#039;s and archs). Just including sal/config.h does it ! &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Classes:&lt;br /&gt;
&lt;br /&gt;
Window -&amp;gt; what? [FIXME]&lt;br /&gt;
ResId -&amp;gt; what?&lt;br /&gt;
&lt;br /&gt;
Does contain the prototype of VclAbstractDialog, inherit of VCL_DLLPUBLIC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
file: dllapi.h [ dll for dynamic linked library ]&lt;br /&gt;
Uses: &amp;lt;sal/config.h&amp;gt; and &amp;gt;sal/types/h&amp;gt;&lt;br /&gt;
includes: VCL_DLLPUBLIC macro&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
file: accel.h [ means accelerator ]&lt;br /&gt;
&lt;br /&gt;
Classes:&lt;br /&gt;
&lt;br /&gt;
Accelerator &lt;br /&gt;
{&lt;br /&gt;
}&lt;br /&gt;
ImplAccelEntry &lt;br /&gt;
{&lt;br /&gt;
public members: &lt;br /&gt;
&lt;br /&gt;
Names&lt;br /&gt;
&lt;br /&gt;
mnId&lt;br /&gt;
maKeyCode&lt;br /&gt;
mpAccel&lt;br /&gt;
mpAutoAccel&lt;br /&gt;
mbEnabled&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function / returns / parameters&lt;br /&gt;
&lt;br /&gt;
ImplGetKeyCode / void / KeyFuncType eFunc, ref rCode1 , ref rCode2, ref rCode3&lt;br /&gt;
&lt;br /&gt;
file: accel.hxx &lt;br /&gt;
&lt;br /&gt;
Uses: &amp;lt;sv.h&amp;gt; , &amp;quot;dllapi.h&amp;quot; ,&amp;lt;tools/resid.hxx&amp;gt;, &amp;lt;&amp;lt;tools/rc.hxx&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Classes:&lt;br /&gt;
&lt;br /&gt;
ImplAccelData;&lt;br /&gt;
ImplAccelEntry;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Important Links ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[Progressive implementation]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Native Font server Implementation&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;[[Mac OS X Porting - Native Fonts]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Native Sound Implementation&amp;#039;&amp;#039;&amp;#039;: [[Mac OS X Porting - Native Audio and Video]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Native Printing Implementation&amp;#039;&amp;#039;&amp;#039;: [[Mac OS X Porting - Native_Printing]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Drag and Drop implementation&amp;#039;&amp;#039;&amp;#039;: [[Mac OS X Porting - Native Drag and drop]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Data Acquisition&amp;#039;&amp;#039;&amp;#039; : [[Mac OS X Porting - Data Acquisition]]&lt;br /&gt;
&lt;br /&gt;
This work is part of http://wiki.services.openoffice.org/wiki/Mac_OS_X_Porting_-_Work_Areas/Todo%27s&lt;br /&gt;
&lt;br /&gt;
[to be continued:-) ]&lt;br /&gt;
&lt;br /&gt;
== Keyboard comparizon between OpenOffice.org / Mac OS X  application ==&lt;br /&gt;
&lt;br /&gt;
[FIXME] redo a cleanest array &lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;vertical-align:top; text-align:centered; background-color:#F0F0F0;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#99CCFF; font-weight:bold;&amp;quot; &lt;br /&gt;
| Modifier||+ key  || Result || TextEdit  returns&lt;br /&gt;
|-&lt;br /&gt;
|ALT|| a||æ ||æ &lt;br /&gt;
|-&lt;br /&gt;
|ALT||b||ß ||ß&lt;br /&gt;
|-&lt;br /&gt;
|ALT||c||© ||©&lt;br /&gt;
|-&lt;br /&gt;
|ALT||d||∂ ||∂&lt;br /&gt;
|-&lt;br /&gt;
|ALT||e||ê ||ê&lt;br /&gt;
|-&lt;br /&gt;
|ALT||f||ƒ ||ƒ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||g ||ﬁ ||ﬁ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||h ||Ì ||Ì&lt;br /&gt;
|-&lt;br /&gt;
|ALT||i ||î ||î&lt;br /&gt;
|-&lt;br /&gt;
|ALT||j ||Ï ||Ï&lt;br /&gt;
|-&lt;br /&gt;
|ALT||k ||È ||È&lt;br /&gt;
|-&lt;br /&gt;
|ALT||l ||¬ ||¬&lt;br /&gt;
|-&lt;br /&gt;
|ALT||m ||µ ||µ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||n ||~ ||~&lt;br /&gt;
|-&lt;br /&gt;
|ALT||o ||œ ||œ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||p ||π ||π&lt;br /&gt;
|-&lt;br /&gt;
|ALT||q ||‡ ||‡&lt;br /&gt;
|-&lt;br /&gt;
|ALT||r ||® ||®&lt;br /&gt;
|-&lt;br /&gt;
|ALT||s ||Ò ||Ò&lt;br /&gt;
|-&lt;br /&gt;
|ALT||t ||† ||†&lt;br /&gt;
|-&lt;br /&gt;
|ALT||u ||º ||º&lt;br /&gt;
|-&lt;br /&gt;
|ALT||v ||◊ ||◊&lt;br /&gt;
|-&lt;br /&gt;
|ALT||w ||‹ ||‹&lt;br /&gt;
|-&lt;br /&gt;
|ALT||x ||≈ ||≈&lt;br /&gt;
|-&lt;br /&gt;
|ALT||y ||Ú ||Ú&lt;br /&gt;
|-&lt;br /&gt;
|ALT||z ||Â ||Â&lt;br /&gt;
|-&lt;br /&gt;
|ALT||A ||Æ ||Æ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||B ||∫ ||∫&lt;br /&gt;
|-&lt;br /&gt;
|ALT||C ||¢ ||¢&lt;br /&gt;
|-&lt;br /&gt;
|ALT||D||∆||∆&lt;br /&gt;
|-&lt;br /&gt;
|ALT||F ||· ||·&lt;br /&gt;
|-&lt;br /&gt;
|ALT||G ||ﬂ ||ﬂ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||H ||Î ||Î&lt;br /&gt;
|-&lt;br /&gt;
|ALT||I ||Î ||Î&lt;br /&gt;
|-&lt;br /&gt;
|ALT||J ||Í ||Í&lt;br /&gt;
|-&lt;br /&gt;
|ALT||K ||Ë ||Ë&lt;br /&gt;
|-&lt;br /&gt;
|ALT||L || &amp;lt;pre&amp;gt;|&amp;lt;/pre&amp;gt; ||&amp;lt;pre&amp;gt;|&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|ALT||M ||Ó ||Ó&lt;br /&gt;
|-&lt;br /&gt;
|ALT||N ||ı ||ı&lt;br /&gt;
|-&lt;br /&gt;
|ALT||O ||Œ ||Œ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||P ||∏ ||∏&lt;br /&gt;
|-&lt;br /&gt;
|ALT||Q ||Ω ||Ω&lt;br /&gt;
|-&lt;br /&gt;
|ALT||R ||‚ ||‚&lt;br /&gt;
|-&lt;br /&gt;
|ALT||S ||∑ ||∑&lt;br /&gt;
|-&lt;br /&gt;
|ALT||T ||™ ||™&lt;br /&gt;
|-&lt;br /&gt;
|ALT||U ||ª ||ª&lt;br /&gt;
|-&lt;br /&gt;
|ALT||V ||√ ||√&lt;br /&gt;
|-&lt;br /&gt;
|ALT||W ||› ||›&lt;br /&gt;
|-&lt;br /&gt;
|ALT||X ||⁄ ||⁄&lt;br /&gt;
|-&lt;br /&gt;
|ALT||Y ||Ÿ ||Ÿ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||Z ||Å ||Å&lt;br /&gt;
|-&lt;br /&gt;
|ALT||$ ||€ ||€&lt;br /&gt;
|-&lt;br /&gt;
|ALT||` ||@ ||@&lt;br /&gt;
|-&lt;br /&gt;
|ALT||£ ||# ||#&lt;br /&gt;
|-&lt;br /&gt;
|ALT||* ||¥ ||¥&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Sous réserve d&amp;#039;erreur ou omission [[User:Ericb|Ericb]] 00:05, 14 January 2007 (CET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[User:Ericb|Ericb]] 15:00, 22 Jul 2005 (EDT)&lt;br /&gt;
&lt;br /&gt;
[[Category:Porting]]&lt;br /&gt;
[[Category:MacOSX]]&lt;br /&gt;
[[Category:Aqua]]&lt;/div&gt;</summary>
		<author><name>Plipli</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=User:Ericb&amp;diff=28944</id>
		<title>User:Ericb</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=User:Ericb&amp;diff=28944"/>
		<updated>2007-03-25T07:27:40Z</updated>

		<summary type="html">&lt;p&gt;Plipli: /* What do we have to do? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Public Documentation License Notice==&lt;br /&gt;
&lt;br /&gt;
The contents of this Documentation (excepted Native Port Roadmap),are subject to the Public Documentation License Version 1.0 (the &amp;quot;License&amp;quot;); you may only use this Documentation if you comply with the terms of this License. A copy of the License is available at http://www.openoffice.org/licenses/PDL.html.&lt;br /&gt;
The Original Documentation is &amp;quot;Mac OS X native port&amp;quot;. The Initial Writer of the Original Documentation is (JCA) Eric Bachard (C) 2005-2006. All Rights Reserved. (Initial Writer contact(s): ericb@openoffice.org.)&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Mac OS X Native port&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;messagebox cleanup metadata&amp;quot; style=&amp;quot;border:1px solid blue;background-color:#B3FFF5;padding:7px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;The first Mac OS X native port objective is make OpenOffice.org run without X11 use, to make it a real Mac application.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;The second one is respect Aqua Human interface Guidelines&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; This is a long term work, and every help and/or contributions, like donations** are welcome.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 **see http://contributing.openoffice.org/index.html&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Native Port Roadmap&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;2006&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
* June 2006: work in progress &lt;br /&gt;
&lt;br /&gt;
- Basis: frame, instances, threads, drawing, painting, resizing (Stephan Schaefer, Tino Rachui)&lt;br /&gt;
&lt;br /&gt;
 Done: &lt;br /&gt;
 implement threads&lt;br /&gt;
 create, manage instance&lt;br /&gt;
 create, manage windows (including parents)&lt;br /&gt;
 create, manage events&lt;br /&gt;
 create manage drawing, resizing&lt;br /&gt;
 create, add menus (Pavel Janik)&lt;br /&gt;
 toggle window fullscreen (Pierre de Filippis)&lt;br /&gt;
 make font server work (Stephan Schaefer)&lt;br /&gt;
&lt;br /&gt;
* Current status font support (Stephan Schaefer, 2006/07/28): the following features are basically working now&lt;br /&gt;
** font selection&lt;br /&gt;
** font size&lt;br /&gt;
** simple font attributes (bold, italic)&lt;br /&gt;
&lt;br /&gt;
 Next step: document first part, and propose design&lt;br /&gt;
&lt;br /&gt;
- native filepicker (Pavel Janik, Florian Heckl)&lt;br /&gt;
&lt;br /&gt;
- native printing implementation (Oliver?)&lt;br /&gt;
&lt;br /&gt;
- native font implementation (Eric Bachard)&lt;br /&gt;
&lt;br /&gt;
* September 2006: &lt;br /&gt;
&lt;br /&gt;
- first proofs of concept: fonts, filepicker .. (more?)&lt;br /&gt;
- show the results (OOoCon 2006?)&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;2007&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
* January 2007: first alpha implementation&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Strategy for native port&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Possible Actions&amp;#039;&amp;#039;&amp;#039;: &lt;br /&gt;
&lt;br /&gt;
Identify us:&lt;br /&gt;
&lt;br /&gt;
#Complete the arrays below&lt;br /&gt;
#Update photos on frapr.com?&lt;br /&gt;
&lt;br /&gt;
Share the work:&lt;br /&gt;
&lt;br /&gt;
#Divide the work between little Teams&lt;br /&gt;
#Update Todo list regularly -&amp;gt; needs some love these days ... [http://wiki.services.openoffice.org/wiki/Mac_OS_X_Porting_-_Work_Areas/Todo%27s]&lt;br /&gt;
&lt;br /&gt;
Help:&lt;br /&gt;
&lt;br /&gt;
#Teach tools between us&lt;br /&gt;
#Do a debug party on IRC&lt;br /&gt;
#write documentation&lt;br /&gt;
&lt;br /&gt;
Meet us:&lt;br /&gt;
&lt;br /&gt;
#IRC&lt;br /&gt;
#Mac Meeting (like nov2005 in Hamburg?)&lt;br /&gt;
&lt;br /&gt;
Inform:&lt;br /&gt;
&lt;br /&gt;
#Update website regularly&lt;br /&gt;
#Blogs&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;WHO&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
Mac Team:&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;vertical-align:top; text-align:left; background-color:#efefef;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#d6d6d6;font-weight:bold;&amp;quot; &lt;br /&gt;
|Developer \ skills || build || write code || code review || debug/trace (higher is better) || contribute to documentation ||&lt;br /&gt;
|-&lt;br /&gt;
|ericb|| x || x || || 1 || x ||&lt;br /&gt;
|-&lt;br /&gt;
|pjanik|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|ssa|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|maho|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|tinor|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|schmidtm|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|ebischoff|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|obr|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|cl|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|aliscafo|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|fheckl|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Fridrich|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|plipli|| || x || || || x ||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Other resources&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
fonts: ?&lt;br /&gt;
&lt;br /&gt;
events: ?&lt;br /&gt;
&lt;br /&gt;
QA: James McKenzie leads QA for the Mac OS X port of OpenOffice.org and is looking for volunteers to spread this effort over several people and needs people from all over the world to test various languages.&lt;br /&gt;
&lt;br /&gt;
graphical: ?&lt;br /&gt;
&lt;br /&gt;
Communication: ?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;WHAT&amp;#039;&amp;#039;&amp;#039;: Status of most important tasks&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;vertical-align:top; text-align:left; background-color:#efefef;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#d6d6d6;font-weight:bold;&amp;quot; &lt;br /&gt;
| Task || Names|| Urgency (1=higher)|| Work in Progress || Done || Code review || Debug || Integration || &lt;br /&gt;
|-&lt;br /&gt;
|Get rid of X11||done || 1 || x || x || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Bundle|| || 1 || x || || || || | ||&lt;br /&gt;
|-&lt;br /&gt;
|Drawing|| || 1 || x || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Fonts||plipli || 1 || x || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Events management|| || 2 || x || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Controls (see list) ||ericb, aliscafo || 2 || x || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Native FilePicker||Florian Heckl, Pavel Janik || 3 || x || x || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Native Printing||Yvan Barthelemy || 3 || x || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Native SpellChecker|| || 4 || || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Player||Mox Soini || 4 || x || || || || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Other tasks:&lt;br /&gt;
&lt;br /&gt;
Help for writing bug lists, status of bugs ..etc&lt;br /&gt;
&lt;br /&gt;
Write howto use gdb, leaks, other tools&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;WHEN&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
From Christian Lippka (last meeting, 25th of august 2006): &lt;br /&gt;
 Aug 26 00:21:38 ChristianL&lt;br /&gt;
 from my point of view what is missing for point 1:&lt;br /&gt;
 text layout, complete font support, keyboard support,&lt;br /&gt;
 fixing repaint issues, having aqua install and run out of the box&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;September 2006&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Present the current state of the project at the 2006 OpenOffice conference in Lyon and Paris&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Late 2006&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
fix OpenOffice.org launch&lt;br /&gt;
fix drawing (repainting)&lt;br /&gt;
Implement missing methods and fix most important bugs (mainly the one leading to crash) in:&lt;br /&gt;
ATS&lt;br /&gt;
Salgraphics&lt;br /&gt;
Salinstance&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;January or February 2007&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
make Java work (works partially)&lt;br /&gt;
make intensive debug&lt;br /&gt;
present something working as alpha&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;June 2007	&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Implementation of:&lt;br /&gt;
native filepicker&lt;br /&gt;
native printing&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Become a Domain Developer for Mac OS X port&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
People regularly contributing to Mac OS x port with regular and quality patches are, after proposal, invited to become a [[DomainDeveloper]].&lt;br /&gt;
&lt;br /&gt;
The purpose of this document is to clearly define all the steps to become a [[DomainDeveloper]]. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Preliminary :  step 1 in  [[Commit_Rights]] must be completed and checked, and you must be in the list of [[http://www.openoffice.org/FAQs/faq-licensing.html#jca1 JCA Licensed people]]&lt;br /&gt;
&lt;br /&gt;
=== Steps for ssh2 key to be uploaded ===&lt;br /&gt;
&lt;br /&gt;
==== Create the key ====&lt;br /&gt;
&lt;br /&gt;
Everything is described here : [[http://www.openoffice.org/scdocs/ddSSHGuide.html SSH Guide]] &lt;br /&gt;
&lt;br /&gt;
==== Upload the key ====&lt;br /&gt;
&lt;br /&gt;
You must create an issue, like described below  :&lt;br /&gt;
&lt;br /&gt;
Component : www&lt;br /&gt;
&lt;br /&gt;
Sub Component : openoffice.org cvs&lt;br /&gt;
&lt;br /&gt;
Title : CVS Commit access request&lt;br /&gt;
&lt;br /&gt;
Add louis ( Louis Suarez Potts) or st ( Stefan Taxhet ) on CC&lt;br /&gt;
&lt;br /&gt;
Upload your ssh2 public key respecting the process ( Attach a DSA key, not an RSA )&lt;br /&gt;
&lt;br /&gt;
A project lead will confirm your request &lt;br /&gt;
&lt;br /&gt;
Then the support will upload your key&lt;br /&gt;
&lt;br /&gt;
Once done the issue is set to Fixed , and the next step has to be verified before &amp;#039;&amp;#039;&amp;#039;you&amp;#039;&amp;#039;&amp;#039; close it.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;EXAMPLE&amp;#039;&amp;#039;&amp;#039; : [[http://www.openoffice.org/issues/show_bug.cgi?id=75291 Upload SSH2 Key for Etsushi Kato]]&lt;br /&gt;
&lt;br /&gt;
==== Verify it works ====&lt;br /&gt;
&lt;br /&gt;
You now can try to connect via tunnel, and follow instructions given [[http://www.openoffice.org/scdocs/ddSSHGuide.html SSH Guide]] &lt;br /&gt;
&lt;br /&gt;
If something goes wrong, ask for help to support, with a maximum of details, to solve the problem.&lt;br /&gt;
&lt;br /&gt;
Once it works, the issue can be closed, and you can e.g. test downloading a module from tunnel repository :&lt;br /&gt;
&lt;br /&gt;
First create a tunnel with the command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh -2 -x -L 2401:localhost:2401 tunnel@openoffice.org&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then in a new window:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export CVSROOT=&amp;quot;:pserver:your_login@localhost:/cvs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
cvs login ( enter )&lt;br /&gt;
&lt;br /&gt;
(your password )&lt;br /&gt;
&lt;br /&gt;
mkdir TEST&lt;br /&gt;
&lt;br /&gt;
cd TEST&lt;br /&gt;
&lt;br /&gt;
cvs -z4 co -r SRC680_m205 vcl &lt;br /&gt;
&lt;br /&gt;
cd vcl &lt;br /&gt;
&lt;br /&gt;
cat CVS/Root  -&amp;gt; should indicate : your local repository&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ask for CVS access for all modules required ===&lt;br /&gt;
&lt;br /&gt;
Two steps : create an issue is mandatory because the concerned project is tools, and because people can have only ssh2 key without being [[DomainDeveloper]].&lt;br /&gt;
&lt;br /&gt;
==== Create an issue ====&lt;br /&gt;
&lt;br /&gt;
You must create an issue, described below  :&lt;br /&gt;
&lt;br /&gt;
Component : tools&lt;br /&gt;
&lt;br /&gt;
Sub Component : www&lt;br /&gt;
&lt;br /&gt;
Title : CVS access to all modules required&lt;br /&gt;
&lt;br /&gt;
Assigned to mh  +  CC for ericb and/or pjanik&lt;br /&gt;
&lt;br /&gt;
Present yourself quickly, and ask the access&lt;br /&gt;
&lt;br /&gt;
A project lead will confirm&lt;br /&gt;
&lt;br /&gt;
An admin will confirm this is ok, and set the issue to Fixed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;EXAMPLE&amp;#039;&amp;#039;&amp;#039; : [[http://www.openoffice.org/issues/show_bug.cgi?id=75494 CVS Access all modules for Etsushi Kato]]&lt;br /&gt;
&lt;br /&gt;
==== Verify ====&lt;br /&gt;
&lt;br /&gt;
Create the tunnel :&lt;br /&gt;
&lt;br /&gt;
open a terminal and type :&lt;br /&gt;
&lt;br /&gt;
ssh -2 -x -L 2401:localhost:2401 tunnel@openoffice.org&lt;br /&gt;
&lt;br /&gt;
once logged in, open a new terminal, and do ( for example ):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd $OOO_SRC_ROOT/&lt;br /&gt;
&lt;br /&gt;
source MacOSXPPCEnv.Set.sh  { source MacOSXX86Env.Set.sh for Mac Intel }&lt;br /&gt;
&lt;br /&gt;
cd vcl  ( for example )&lt;br /&gt;
&lt;br /&gt;
IMPORTANT : be sure vcl has been checked from tunnel, not from anoncvs ( cat CVS/Root will give you the answer )&lt;br /&gt;
&lt;br /&gt;
export CWS_WORK_STAMP=aquavcl01   # Only needed for working with [[EIS]], can change for a different CWS ;) &lt;br /&gt;
&lt;br /&gt;
cd aqua/source/gdi&lt;br /&gt;
&lt;br /&gt;
add your changes to your_file.cxx, then commit :&lt;br /&gt;
&lt;br /&gt;
cvs commit -m &amp;quot;#i75689# bla bla ... the reason of the modification(s)&amp;quot;  your_file.cxx  # The #i75689# is an issue number in the tracker&lt;br /&gt;
&lt;br /&gt;
cvs update&lt;br /&gt;
&lt;br /&gt;
If nothing is wrong, cvs update should not return M for your_file.cxx, means the commit is successfull.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
In case of problem, use the issue until it is fixed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;#039;&amp;#039;&amp;#039;Welcome aboard :)&amp;#039;&amp;#039;&amp;#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;2nd Mac porters meeting&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
This section has been moved to [[2nd Mac porters meeting]]&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;IRC Mac port meetings&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
This section has been moved to [[MacOSXPortMeetings]].&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Mac OS X (X11) Quality Assurance&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
This section has been moved to [[Mac OS X ( X11) Quality Assurance]]&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Mac OS X Implementing HIView&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
This section has been moved to [[Mac OS X Implementing HIView ]]&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Debug OpenOffice.org using XCode &amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
[[ MacOSX Debug OpenOffice.org using XCode]]&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Description of the Native Port problem&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
=== How does OpenOffice.org work on Mac OS X? ===&lt;br /&gt;
&lt;br /&gt;
Currently, on Mac OS X, OpenOffice.org uses X11, as &amp;quot;client&amp;quot;: X11 is a graphical server, coming from Unix world, and able to run under Linux, *BSD, Solaris, Mac OS X.&lt;br /&gt;
&lt;br /&gt;
 - X11 is run as an application, managed like other Apple applications.&lt;br /&gt;
 - All unix like applications are managed by X11, and from Aqua environment, only X11 is seen as only one applicatiion, &lt;br /&gt;
  even if other Unix/Linux (e.g.) applications are runing.&lt;br /&gt;
&lt;br /&gt;
OpenOffice.org asks X11 to display a window, waits for X11 acknowledgment, and OpenOffice.org displays the window. All transactions use the network, locally or not. the same mechanism is used for everything to be displayed.&lt;br /&gt;
&lt;br /&gt;
[[User:Ericb|Ericb]] 11:39, 3 June 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
=== Issues and known problems ===&lt;br /&gt;
&lt;br /&gt;
All events are managed by OpenOffice.org and X11, using the Xlib&lt;br /&gt;
&lt;br /&gt;
Only .ttf fonts type is currently available. Note: &amp;#039;&amp;#039;&amp;#039;system fonts are available &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
The rendering is made by X11, not by Mac OS X rendering engine.&lt;br /&gt;
&lt;br /&gt;
X11 and all its clients are seen as one application only: drag and drop protocol does not work because of that (solution: Pasteboard Manager)&lt;br /&gt;
&lt;br /&gt;
==== Other links ====&lt;br /&gt;
&lt;br /&gt;
http://wiki.services.openoffice.org/wiki/List_of_OpenOffice.org_Mac_OS_X_issues_and_problems#&lt;br /&gt;
&lt;br /&gt;
http://wiki.services.openoffice.org/wiki/Printing_problems_with_OpenOffice.org_2.0_for_Mac_OS_X#Reporting_printing_problems&lt;br /&gt;
&lt;br /&gt;
[[User:Ericb|Ericb]] 11:39, 3 June 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
== What do we have to do?==&lt;br /&gt;
&lt;br /&gt;
* (in progress) : Implement direct access to Apple graphical engine, using Apple API: Quartz2D/CoreGraphics (and replacing Xlib use)&lt;br /&gt;
&lt;br /&gt;
like: instantiate, manage events and threads for a graphical instance + all needed objects, drawing: manage all drawing cases&lt;br /&gt;
&lt;br /&gt;
* (in progress) : Implement native events management, using CarbonEventManager (replacing Xlib management)&lt;br /&gt;
&lt;br /&gt;
* (in progress) : Implement native font use, using Apple Type Server and ATSUI (for Unicode Imagery) (replacing X11 management)&lt;br /&gt;
&lt;br /&gt;
Work in progress: [[Mac OS X Porting - Native Fonts]]&lt;br /&gt;
&lt;br /&gt;
* Implement native sound, using QuickTime (replacing Java Media Framework): [[Mac OS X Porting - Native Audio and Video]]&lt;br /&gt;
&lt;br /&gt;
* Implement native Drag and drop, Implementing Pasteboard Manager: [[Mac OS X Porting - Native Drag and drop]]&lt;br /&gt;
&lt;br /&gt;
* (done experimental) Implement Native Filepicker&lt;br /&gt;
&lt;br /&gt;
* Implement Native Printing: current uses cups, but native printing is mandatory: [[Mac OS X Porting - Native_Printing]]&lt;br /&gt;
&lt;br /&gt;
* Implement Apple Spellchecker&lt;br /&gt;
&lt;br /&gt;
--[[User:Plipli|Plipli]] 09:27, 25 March 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Where is located the code to be modified?&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
Most of the changes are located in vcl (Visual Class Layer), for everything graphical, events, fonts, rendering and printing.&lt;br /&gt;
&lt;br /&gt;
Other, for sound and movies will be in avmedia (where the player is implemented in OpenOffice.org sources).&lt;br /&gt;
&lt;br /&gt;
For drag and drop, dtrans is concerned (Pasteboard Manager implementation)&lt;br /&gt;
&lt;br /&gt;
[FIXME]: Filepicker? Apple Spellchecker?&lt;br /&gt;
&lt;br /&gt;
[[User:Ericb|Ericb]] 11:39, 3 June 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;How will the new implementation be tested?==&lt;br /&gt;
&lt;br /&gt;
Currently, all openOffice.org code can be compiled without using the Xlib. but of course, a lot of features are missing,&lt;br /&gt;
&lt;br /&gt;
and the final package simply won&amp;#039;t work&lt;br /&gt;
&lt;br /&gt;
In vcl module&amp;quot;, a &amp;#039;&amp;#039;&amp;#039;toy&amp;#039;&amp;#039;&amp;#039; called svdem is built at buildtime. This binary is linked to libvcl* and so all new stuff can be tested.&lt;br /&gt;
&lt;br /&gt;
e.g. : draw anti-aliased lines works well. &lt;br /&gt;
&lt;br /&gt;
Everything implemented in aqua vcl code will be included in libvclplug_aqua, and svdem source code will contain a specific part to proceed tests.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;messagebox cleanup metadata&amp;quot; style=&amp;quot;border:1px solid blue;background-color:#B3FFF5;padding:7px;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;The magic is: when all needed features will work with svdem, it will work in the new version of OpenOffice.org !!&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[FIXME]: add more complete list of features to implement and test.&lt;br /&gt;
&lt;br /&gt;
== AquaVCL 01 cws ==&lt;br /&gt;
&lt;br /&gt;
[[http://qa.openoffice.org/issues/buglist.cgi?keywords=aqua Top 10 of Aqua issues]]&lt;br /&gt;
&lt;br /&gt;
[[Aquavcl01 tasks]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Changelog ===&lt;br /&gt;
&lt;br /&gt;
====Work in progresss : alpha 0.6 ====&lt;br /&gt;
&lt;br /&gt;
Started (19th March ) : &lt;br /&gt;
&lt;br /&gt;
Michael Sicotte proposed to investigate in timers, and continue [[http://www.openoffice.org/issues/show_bug.cgi?id=75228 Pavel&amp;#039;s work]] : objective is to replace obsolete code.  ( 23th March)&lt;br /&gt;
&lt;br /&gt;
[experimental] plipli proposed a patch for a new salframe implementation, using HIView + optionally compositing  (21th March )&lt;br /&gt;
&lt;br /&gt;
[commit scheduled] Michael Sicotte proposed a complete patch for invert() ( SAL_INVERT SAL_INVERT_50 and SAL_INVERT_TRACKFRAME )  (20th March )&lt;br /&gt;
&lt;br /&gt;
Tino proposed to work on code cleanup in salatsuifontutils.cxx, removing obsolete code &lt;br /&gt;
&lt;br /&gt;
ismael and michael work on invert() + drawAlphaRect() &lt;br /&gt;
&lt;br /&gt;
Damien started to work on drawEPS() &lt;br /&gt;
&lt;br /&gt;
plipli and ericb work on refresh&lt;br /&gt;
&lt;br /&gt;
==== alpha 0.5====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Top 10 Summary :  7 issues over 10 are fixed or very close to be : &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;time to code review, tracing, and search for memory leaks&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[done] Unicode input in salframe ( ekato ) ( 19th March )&lt;br /&gt;
&lt;br /&gt;
[experimental, works partially] beginning of HIView + HIComboxes works (text still missing)  (ericb + plipli)  ( 14th March ) &lt;br /&gt;
&lt;br /&gt;
[done] replace NewRgn() in salframe (ericb (11th March )&lt;br /&gt;
&lt;br /&gt;
[experimental, but very interesting] Improved native windows ( ismael ) ( 7th March )&lt;br /&gt;
&lt;br /&gt;
====alpha 0.4==== &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[Informative]&amp;#039;&amp;#039;&amp;#039; build runs with Leopard 9A377a ( fheckl ) ( 7th March ) &lt;br /&gt;
&lt;br /&gt;
Refresh screen issues  (plipli) (4th to 10th March )&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[informative]&amp;#039;&amp;#039;&amp;#039;  plipli announced  progress with refresh screen issues  ( 28th February )&lt;br /&gt;
&lt;br /&gt;
[experimental, not yet commited] Proxy configuration from system ( pjanik)  ( 28th February )&lt;br /&gt;
&lt;br /&gt;
[done] highlighted native button ( pjanik)  ( 27th February ) &lt;br /&gt;
&lt;br /&gt;
Native File Picker works ( fheckl  / pjanik )  ( 23th February  )&lt;br /&gt;
&lt;br /&gt;
====alpha 0.3====&lt;br /&gt;
&lt;br /&gt;
Cursor does appear -&amp;gt; invert() + setting a setBlinkTime value in UpdateSettings()  (pjanik /ericb ) &lt;br /&gt;
&lt;br /&gt;
[done] mirroring negative images (ismael) + DrawAlphaBitmap() + CreateWithMask()&lt;br /&gt;
&lt;br /&gt;
pjanik patch for Focus Events &lt;br /&gt;
&lt;br /&gt;
[done] scrolling works ( pjanik ) (17th February )&lt;br /&gt;
&lt;br /&gt;
[done ] carret works ( plipli) (17th February )&lt;br /&gt;
&lt;br /&gt;
[done] checkbuttons fix for checkmarks  (ericb) ( 17th February )&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[Informative]&amp;#039;&amp;#039;&amp;#039; Pavel Janik propose to solve offScreen buffer using HIView ( 17th February ) &lt;br /&gt;
&lt;br /&gt;
[experimental, never commited] patch for macosxrc.txt use + UpdateSettings() use in salframe.cxx ( ericb ( 16th February )&lt;br /&gt;
&lt;br /&gt;
Michael Sicotte joined the Team ( 15th February )&lt;br /&gt;
&lt;br /&gt;
invert() : first try  (ericb)   ( 13th february )&lt;br /&gt;
&lt;br /&gt;
====alpha 0.2====&lt;br /&gt;
&lt;br /&gt;
[12th February 2007 ]&lt;br /&gt;
&lt;br /&gt;
[done] calc does not start : bug identified by tino , first workaround (ericb)   [[http://www.openoffice.org/issues/show_bug.cgi?id=73691 issue 73691]]&lt;br /&gt;
&lt;br /&gt;
[done] bitmaps in native popup menus (ismael)  &lt;br /&gt;
&lt;br /&gt;
[done]  replace obsolete code for HandleWindowPaintEvent(), newRgn() .. etc  (ericb)  (12th February)&lt;br /&gt;
&lt;br /&gt;
correct salatslayout patch (plipli)  ( 11th February)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[Informative]&amp;#039;&amp;#039;&amp;#039;  Michel Renon proposed a summary about his work on fonts issues&lt;br /&gt;
&lt;br /&gt;
[patch] Pavel fixed several menu crashes (09th February )&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[Informative]&amp;#039;&amp;#039;&amp;#039; : Pavel posted a mail about several crashes origin &lt;br /&gt;
 &lt;br /&gt;
patch for radioboxes and checkboxes ( ericb ) (9th February)&lt;br /&gt;
&lt;br /&gt;
first complete patch for salatslayout.cxx ( plipli) ( 9th February )&lt;br /&gt;
&lt;br /&gt;
[done] most important crashes fixed ( pjanik)  ( 09th february )&lt;br /&gt;
&lt;br /&gt;
Modified baseline for 2.2. : Mac OS X10.4 -&amp;gt; Aqua will be 10.4 and 10.5 compatible only ( ericb)&lt;br /&gt;
&lt;br /&gt;
first try with multi line sallayout (plipli )  ( 08th February )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Damien Duportal joined the Team ( 7th February ) &lt;br /&gt;
&lt;br /&gt;
[done] scrollbar changes (ericb )   ( 4th February )&lt;br /&gt;
&lt;br /&gt;
====alpha 0.1====&lt;br /&gt;
&lt;br /&gt;
create Top 10 of issues before alpha  3rd February 2007 :  See : [[http://porting.openoffice.org/mac/news/2007/20070203toptenbeforealpha.html Top 10 of issues]]&lt;br /&gt;
&lt;br /&gt;
[experimental, not commited] patch for TPT() implementation (ericb)  ( 2nd February 2007 )&lt;br /&gt;
&lt;br /&gt;
Pavel Janik proposed to implement TransformProcessType() ( 2nd February 2007 )&lt;br /&gt;
&lt;br /&gt;
[not commited] implement UpdateSettings()   (ericb)  &lt;br /&gt;
&lt;br /&gt;
Pavel Janik resynchronized aquavel01 cws  with m202  ( 2nd February 2007 )&lt;br /&gt;
&lt;br /&gt;
====alpha 0.03====&lt;br /&gt;
&lt;br /&gt;
Michel Renon joined the Team (1st February )&lt;br /&gt;
&lt;br /&gt;
[done] fix checkbuttons and radiobuttons issues: offsets, redrawing of the check marks ( ericb) &lt;br /&gt;
&lt;br /&gt;
[done] fix scrollbar buttons (implement correct methods to retrieve dimensions)&lt;br /&gt;
&lt;br /&gt;
[done] implement mapfiles for Mac OS X (Stephan Bergmann, Daniel Boelzle, Tino Rachui , Pavel Janik)&lt;br /&gt;
&lt;br /&gt;
====alpha 0.02====&lt;br /&gt;
&lt;br /&gt;
[done] modify libsalsystools.dylib to be correctly loaded with the bundle  (ericb, + pjanik)&lt;br /&gt;
&lt;br /&gt;
[done] add mouse drag events  ( pjanik )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====alpha 0.01====&lt;br /&gt;
&lt;br /&gt;
[done] add new feature for Aqua windows, to allow QuickTime player use( mox )&lt;br /&gt;
&lt;br /&gt;
[done] replace obsolete code in salframe.cxx with (ericb)&lt;br /&gt;
&lt;br /&gt;
[done] fix correct size for main window (GetOptimaWindowSize()  ) (ericb)&lt;br /&gt;
&lt;br /&gt;
[done] fix alpha channel in pixmaps (ismael)&lt;br /&gt;
&lt;br /&gt;
====alpha 0.0====&lt;br /&gt;
&lt;br /&gt;
[done] pushbutton where not correctly drawn (ericb)&lt;br /&gt;
&lt;br /&gt;
[done] fix missing mouse events  (pjanik)&lt;br /&gt;
&lt;br /&gt;
[done] fix nRepeat in text entry  (ssa)&lt;br /&gt;
&lt;br /&gt;
2nd Mac porters Meeting&lt;br /&gt;
&lt;br /&gt;
===Work in progress ===&lt;br /&gt;
&lt;br /&gt;
URGENT :&lt;br /&gt;
&lt;br /&gt;
Top of issues causing crashes : event issue when tips is enabled causes crashes ( well known window / handler  / window desctructor / event loop bug )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Salatsuifontutils :  replace old code, track leaks : tino&lt;br /&gt;
&lt;br /&gt;
[done] Bitmaps : ( isma87) &lt;br /&gt;
&lt;br /&gt;
[running]  Crashes : (tino, pjanik, ericb, isma87, plipli )&lt;br /&gt;
&lt;br /&gt;
[???] Drag and drop :   (vijay)&lt;br /&gt;
&lt;br /&gt;
[???] Printing   (ybart)  &lt;br /&gt;
&lt;br /&gt;
Florian Heckl proposed a subject for Google Summer of Code about native printing&lt;br /&gt;
&lt;br /&gt;
Drawing/ windowing ( plipli / ericb ) -&amp;gt; mainly refresh &lt;br /&gt;
&lt;br /&gt;
[done] Implement cursor &lt;br /&gt;
&lt;br /&gt;
[started] Native Controls   (ericb) &lt;br /&gt;
&lt;br /&gt;
[work in progress] partial multiline sallayout  (plipli )&lt;br /&gt;
&lt;br /&gt;
To do : &lt;br /&gt;
&lt;br /&gt;
(started, Oliver) - modify the tree to make the bundle start without hack ( issue fixed during buildtime) &lt;br /&gt;
&lt;br /&gt;
(started, Florian Heckl)  verify Native FilePicker implementation ( works , tested in Hamburg  )&lt;br /&gt;
&lt;br /&gt;
[done] Ismael Merzaq)  implement blit functions in salgdi  ( important fix:  probably apha version to be tested once done) &lt;br /&gt;
&lt;br /&gt;
[done] Sebastien Plisson- update the missing functions list ( fonts ... ask hdu &amp;amp; cl&lt;br /&gt;
&lt;br /&gt;
[started] ericb, Mox Soini, Sebastien Plisson, Tino Rachui, Pavel janik continue to replace obsolete code&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
fix crashes with menus  (started : tino )&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Sort of documentation about VCL around Native Mac OS X port&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Do we really need to understand how it works? ;-)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vcl content:&lt;br /&gt;
&lt;br /&gt;
ls -laR | wc -l&lt;br /&gt;
  1750&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; Uff 1750 files to analyse :-/&lt;br /&gt;
&lt;br /&gt;
Our purpose is to describe the vcl organisation. The content of vcl is so important, that at the begining, the content will looks a bit confused. e.g. class names ..etc have nothing to do, only description with words and sense, but this will need some time before we can understand everything.&lt;br /&gt;
&lt;br /&gt;
How analyse with more efficiency? After some months to anlalyse &amp;#039;&amp;#039;&amp;#039;&amp;quot;horizontaly&amp;quot;&amp;#039;&amp;#039;&amp;#039;, it appears that list all the content of a directory is not the solution. Of course, we learned a lot, but we now have to complete with &amp;#039;&amp;#039;&amp;#039;&amp;quot;orthogonal&amp;quot;&amp;#039;&amp;#039;&amp;#039; method (compared to the previous one). The first method wasn&amp;#039;t obviously not the good/best way to describe vcl.&lt;br /&gt;
 &lt;br /&gt;
[FIXME] a different approach (will ask confirmation to Philipp Lohman), could be a description of how it work in runtime. First define what an instance is, a frame, and what exactly is concerned by such &amp;quot;objects&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
With that, we can write a list of different objects all using the same scheme: empty boxes (means pure virtual methods and classes in generic libvvcl), really implemented in the specific part, and finally, the API &amp;quot;encapsulated&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The most difficult is to see where the API is used. But for all the parts, this is the same.&lt;br /&gt;
&lt;br /&gt;
Finally, &amp;#039;&amp;#039;&amp;#039;what is important is the design of vcl&amp;#039;&amp;#039;&amp;#039;. Which &amp;#039;&amp;#039;&amp;#039;patterns&amp;#039;&amp;#039;&amp;#039; are used? What are the dependencies, how works the stack for the events, how works the scheduler, the timers too is very important, even fundamental for Aqua implementation. Will have a look at gsl mailing list, and other resources. Probably everything is already (randomly) written somewhere.&lt;br /&gt;
&lt;br /&gt;
=== VCL organisation ===&lt;br /&gt;
&lt;br /&gt;
Thank&amp;#039;s to Philipp Lohmann for this short, but precise description:&lt;br /&gt;
&lt;br /&gt;
Basically vcl is divided in the system dependent and the system independent part. The interface between these two is mostly the Sal interface (every interface name Sal*: SalInstance, SalFrame, SalGraphics, SalPrinter, etc.).&lt;br /&gt;
&lt;br /&gt;
SalInstance is a factory that can create all the other abstracted interfaces of the system dependent part. It also provides the main loop SalInstance::Yield()&lt;br /&gt;
&lt;br /&gt;
SalFrame abstracts any kind of system window.&lt;br /&gt;
&lt;br /&gt;
SalVirtualDevice abstracts an offscreen window (e.g. a Pixmap on X11)&lt;br /&gt;
&lt;br /&gt;
SalPrinter and SalInfoPrinter abstract the system print queues where SalInfoPrinter is for querying and SalPrinter for actual printing.&lt;br /&gt;
&lt;br /&gt;
SalGraphics is an interface produced by either SalFrame, SalVirtualDevice or SalPrinter which is used for actual drawing operations (text, bitmaps, vector graphics)&lt;br /&gt;
&lt;br /&gt;
SalSound is for sound playing.&lt;br /&gt;
&lt;br /&gt;
SalBitmap provides memory for bitmap graphics as well as methods converting this memory to a system handle (e.g. a Pixmap on X11).&lt;br /&gt;
&lt;br /&gt;
SalOpenGL provides OpenGL functionality if available.&lt;br /&gt;
&lt;br /&gt;
SalTimer is an interface for periodically triggering the event queue (to timer implementation).&lt;br /&gt;
&lt;br /&gt;
SalI18NImeStatus handles how the status window of an Input Method Editor (IME) should display (this is mainly X11 specific).&lt;br /&gt;
&lt;br /&gt;
SalSystem has some system specific methods that did not belong anywhere else:-)&lt;br /&gt;
&lt;br /&gt;
Of all these there interfaces is at least one implementation per system (Windows, X11 or Mac). The Unix implementation also has a plugin concept to allow for integration of different native toolkits (currently gtk and Qt) which became necessary for the implementation of Native Widget Framework (NWF) to display controls like their normal desktop counterparts.&lt;br /&gt;
&lt;br /&gt;
Basically the independent part (what is beneath vcl/source directory) has generic methods for drawing, window handling and stuff which it brings into a suitable form and then delegates to the system specific implementation (located beneath vcl/win for Windows and vcl/unx for the X11 platforms).&lt;br /&gt;
&lt;br /&gt;
[[User:Ericb|Ericb]] 16:12, 1 July 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
===Sub-directories description ===&lt;br /&gt;
&lt;br /&gt;
==== &amp;#039;&amp;#039;&amp;#039;Organisation of vcl directories&amp;#039;&amp;#039;&amp;#039; ====&lt;br /&gt;
&lt;br /&gt;
[[Image:aquavcl_organisation_complete_02.jpg]]&lt;br /&gt;
&lt;br /&gt;
==== &amp;#039;&amp;#039;&amp;#039;Directories in vcl. Short description&amp;#039;&amp;#039;&amp;#039; ====&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; aqua &amp;#039;&amp;#039;&amp;#039;: The name Aqua means Apple look and feel, and is well known as [http://developer.apple.com/documentation/UserExperience/Conceptual/OSXHIGuidelines/XHIGIntro/chapter_1_section_1.html Aqua Human Interface Guidelines]. This look and feel means Mac OS X. The work was begun by (probably) P. luby, Dan Williams Herbert Duerr (most of fonts stuff) and Ed Peterlin. Currently in ruin, this directory does contain a lot of ideas to investigate. The most important part of needed changes for native version (3.0) will be done inside aqua dir inc: does contain all vcl relative includes [PART1]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; prj &amp;#039;&amp;#039;&amp;#039;: Does contain build.lst and d.lst build.lst give us dependencies: probably a lot for vcl, build 98th module over ~148. Everything graphical depends in vcl. &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; qa &amp;#039;&amp;#039;&amp;#039; does contain all quality assurancy stuff&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;source&amp;#039;&amp;#039;&amp;#039;: the most important:-) This directory contains common sources for all architectures and OS. Mainly: Windows, Unix: Linux , Mac OS X (X11), Solaris, including generic, kde and gtk plugins, and Aqua (Mac OS X without X11, work currently in progress). &lt;br /&gt;
&lt;br /&gt;
Depending on the OS and the architecture, binaries are built or not.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; test &amp;#039;&amp;#039;&amp;#039;: This directory does contain all the needed stuff for tests. As example, in qa/testdocuments, you&amp;#039;ll find three documents (one writer, one calc and one impress) for tests purpose. &lt;br /&gt;
Other available tests are about memcheck and persistent window state. &lt;br /&gt;
 &lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; unx &amp;#039;&amp;#039;&amp;#039;: this directory does contain all unixes stuff. We have to understand what is inside to implement aqua port. For example, a lot of classes/strutures and objects use Xlib calls we have to replace with Carbon/Cocoa call (at least at first time) for Mac OS X native port.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; win &amp;#039;&amp;#039;&amp;#039;: Doing Mac OS X native port, I first believed this directory was not interesting for us, but I was wrong: OpenOffice.org roots are inside this directory, and a lot of comments and resources are inside. Mainly interesting if Carbon is used.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;workben&amp;#039;&amp;#039;&amp;#039;: Does contain a toy called &amp;quot;svdem&amp;quot;. svdem is a binary, used for new implementations. For example, actual aqua development uses svdem intensively, to verify all important properties we need: &lt;br /&gt;
&lt;br /&gt;
- display a window first (al least ...:)) &lt;br /&gt;
&lt;br /&gt;
- close cleanly this window&lt;br /&gt;
&lt;br /&gt;
- display a point&lt;br /&gt;
&lt;br /&gt;
- trace a line&lt;br /&gt;
&lt;br /&gt;
- trace an area &lt;br /&gt;
&lt;br /&gt;
- superpose two areas doing some important graphical operations, (like xor),&lt;br /&gt;
&lt;br /&gt;
- display a character&lt;br /&gt;
&lt;br /&gt;
- display a menu. &lt;br /&gt;
&lt;br /&gt;
- intercept events correctly.&lt;br /&gt;
&lt;br /&gt;
[FIXME] add more tests&lt;br /&gt;
&lt;br /&gt;
[[User:Ericb|Ericb]] 13:21, 3 June 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Naming convention&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
* Class names start with upper case letters, to improve readability.&lt;br /&gt;
&lt;br /&gt;
* Implemented Class names are derived from the virtual classes but can of course take arbitrary names.&lt;br /&gt;
To increase readability, it&amp;#039;s recommended to closely follow the base class name.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Impl prefix: means Implementation details&amp;#039;&amp;#039;&amp;#039;. The concerned class or method or function is not used outside of this module, so no external code (or other libraries) can see it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[ Events types using Carbon API (Mac OS X): ]]&amp;#039;&amp;#039;&amp;#039; A lot of events have to be managed in runtime. Here is a short description&lt;br /&gt;
&lt;br /&gt;
- do not freeze because bad event loops&lt;br /&gt;
&lt;br /&gt;
- event types implementation: currently, they are defined in vcl/aqua/inc/aquavclevents.hxx&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Apart: exact sense of hedabu? -&amp;gt; [FIXME] as far as I understood it: it is like &amp;quot;copy&amp;quot; to deliver software into the solver, with extra magic. The header files for example are manipulated so paths need not be exact. &amp;quot;headabu&amp;quot; is supposed to disappear little by little.&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;What do we have to build in vcl?&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
Two libraries, corresponding ressources (localized) and a toy so called « svdem »&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Common part&amp;#039;&amp;#039;&amp;#039;: &lt;br /&gt;
&lt;br /&gt;
in grey on right. The result will be a non architecture dependant library, built in all cases: for instance, libvcl680mxi.dylib on Mac Intel.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Specific part  &amp;quot; a plugin &amp;quot; &amp;#039;&amp;#039;&amp;#039;: &lt;br /&gt;
&lt;br /&gt;
Light yellow: aqua part will only concern Mac OS X (non X11) the name will probably be libvcl_aqua680mxi.dylib &lt;br /&gt;
&lt;br /&gt;
As you can see, win means windows part, in blue&lt;br /&gt;
&lt;br /&gt;
For Unix build (Linux, Solaris or current Mac OS X X11), in purple.&lt;br /&gt;
&lt;br /&gt;
Result will be:&lt;br /&gt;
&lt;br /&gt;
libvclplug_PLUGIN680mxi.DLLSUFFIX , where PLUGIN can be iether gen (generic) or gtk (using gtk+) or kde (using qt), and DLLSUFFIX can be either .so (linux) or .dylib (Mac OS X) ...etc (I&amp;#039;m not sure for other cases).&lt;br /&gt;
&lt;br /&gt;
Example: libvcl680mxi.dylib and libvclplug_aqua680mxi.dylib&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;In runtime&amp;#039;&amp;#039;&amp;#039;, libvclplug_aqua will be linked to libvcl680. the first one will contain the real implementation (respecting the API, e.g. Carbon) while the generic libvcl will only contain pure virtual methods ...etc like &amp;quot;empty boxes&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Current Aqua content ===&lt;br /&gt;
&lt;br /&gt;
A more complete description of aqua (Mac OS X / no X11 specific): [[Image:Vcl_aqua_organisation_02_tree.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==EXISTING objects to build in aqua==&lt;br /&gt;
&lt;br /&gt;
===Sal APP &amp;quot;everything application&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
[FIXME] add all objects descriptions&lt;br /&gt;
&lt;br /&gt;
==== saldata ====&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Defined in plugin exclusively&amp;#039;&amp;#039;&amp;#039; (i.e. for headers)&lt;br /&gt;
&lt;br /&gt;
Unix: unx/source/app/saldata.cxx (header in unx/inc)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Aqua: aqua/source/app/saldata.cxx (header in win/inc)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Windows: win/source/app/saldata.cxx (header in aqua/inc)&lt;br /&gt;
&lt;br /&gt;
* Role: saldata contains various kind of data used by the implementation for the concerned platform. &amp;#039;&amp;#039;&amp;#039;It is a bunch of global data collections reserved for the platform&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
It is just completely platform dependent, and nobody except this plugin can see it.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Saldata is something like a &amp;quot;second sal&amp;quot;, but providing an abstraction regarding windowing and graphics&amp;#039;&amp;#039;&amp;#039;, while SAL module provides an abstraction more Operating System oriented) &lt;br /&gt;
&lt;br /&gt;
e.g. : have a look at XRequest array in vcl/unx/source/app/saldata.cxx =&amp;gt; all calls are for Xlib (X11).  Ok, useless there, but interesting:-)&lt;br /&gt;
&lt;br /&gt;
[FIXME]: use Windows implementation could be a good starting point. Nothing is the same, but the current aquavcl cws uses similar objects, and it works very correctly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
saldatax.cxx uses classes SalInstance, SalObject, SalFrame, SalVirtualDevice, SalPrinter and fontList.&lt;br /&gt;
&lt;br /&gt;
Current list of possible objects who can be instantiated/released:&lt;br /&gt;
&lt;br /&gt;
structure SalData: does contain pointers on all kind of objects from other classes used in saldata.&lt;br /&gt;
&lt;br /&gt;
inline functions: [FIXME]: complete the description&lt;br /&gt;
&lt;br /&gt;
- SetSalData:&lt;br /&gt;
- GetSalData:&lt;br /&gt;
- GetAppSalData:&lt;br /&gt;
&lt;br /&gt;
==== salinst ====&lt;br /&gt;
&lt;br /&gt;
=&amp;gt; implemented in vcl/aqua/source/app/salinst.cxx&lt;br /&gt;
&lt;br /&gt;
Role: &lt;br /&gt;
&lt;br /&gt;
* get environment, mutexes, instantiate AquaSalInstance (Ctor, Dtor),&lt;br /&gt;
&lt;br /&gt;
* instantiates/releases a lot of other objects using Get() / CreateObject() / DestroyObject() methods.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Current list of possible objects who can be instantiated/released:&lt;br /&gt;
&lt;br /&gt;
 * VirtualDevice [FIXME]: exact role?&lt;br /&gt;
&lt;br /&gt;
 *Printer  &lt;br /&gt;
&lt;br /&gt;
- GetDefaultPrinter/ CreatePrinter() / DestroyPrinter - what a name ;-) -&lt;br /&gt;
&lt;br /&gt;
- InfoPrinter (Get/Create/Delete)&lt;br /&gt;
&lt;br /&gt;
- PrinterQueue (DeletePrinterQueueInfo / GetPrinterQueueInfo / GetPrinterQueueState)&lt;br /&gt;
&lt;br /&gt;
 * System (Create / Delete) [FIXME]: what means system here?&lt;br /&gt;
&lt;br /&gt;
 * Events: &lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::SetEventCallback()&lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::SetErrorEvenCallback()&lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::GetConnectionIdentifier()&lt;br /&gt;
&lt;br /&gt;
 * Menu / MenuItem: &lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::CreateMenu() / same for DestroyMenu()&lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::CreateMenuItem / same DestroyMenuItem()&lt;br /&gt;
&lt;br /&gt;
 * Sound: &lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::CreateSalSound()  =&amp;gt; object to a pointer of SalSound type&lt;br /&gt;
&lt;br /&gt;
Note: AquaSalInstance::DestroySalSound is not implemented (?)&lt;br /&gt;
&lt;br /&gt;
 * Timer: CreateTimer() /&lt;br /&gt;
&lt;br /&gt;
AquaSalInstance:: DestroyTimer() is not yet implemented (?)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Class MacImeStatus: inherits of SalI18NImeStatus&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; only there to see if there is a window to toggle into menubar [FIXME]??&lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::CreateI18NImeStatus(): instantiates MacImeStatus&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;For futher informations, see: &amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;[[Content of salinst.cxx]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
([[User:Ericb|Ericb]] 16:11, 20 May 2006 (CEST) )&lt;br /&gt;
&lt;br /&gt;
==== salmain ====&lt;br /&gt;
&lt;br /&gt;
Role: if possible, runs the standard vcl application code SVMain()&lt;br /&gt;
&lt;br /&gt;
([[User:Ericb|Ericb]] 16:15, 20 May 2006 (CEST))&lt;br /&gt;
&lt;br /&gt;
==== salsound ====&lt;br /&gt;
&lt;br /&gt;
==== salsys ====&lt;br /&gt;
&lt;br /&gt;
==== saltimer ====&lt;br /&gt;
&lt;br /&gt;
=== Sal GDI (everything Graphical Display Interface) ===&lt;br /&gt;
&lt;br /&gt;
====salgdinativewidgets====&lt;br /&gt;
&lt;br /&gt;
[[native controls]]&lt;br /&gt;
&lt;br /&gt;
==== salatslayout ====&lt;br /&gt;
&lt;br /&gt;
==&amp;gt; implemented in vcl/aqua/source/gdi/salatslayout.cxx&lt;br /&gt;
&lt;br /&gt;
- Handle text layouting :&lt;br /&gt;
&lt;br /&gt;
    * Use ATSUI (ATSUCreateTextLayoutFromPtr) to layout the text unicode char buffer&lt;br /&gt;
    * Use ATSUI (ATSU..) to get informations about glyphs&lt;br /&gt;
    * Populate different arrays (mpGlyph2Chars, mpChars2Glyph, mpCharsWidths, mpGlyphAdvances)&lt;br /&gt;
      that are used in various methods.&lt;br /&gt;
&lt;br /&gt;
==== salatsuiutils ====&lt;br /&gt;
&lt;br /&gt;
==== salfontutils ====&lt;br /&gt;
&lt;br /&gt;
==== salmathutils ====&lt;br /&gt;
&lt;br /&gt;
==== sal bmp ====&lt;br /&gt;
&lt;br /&gt;
==== salvd ====&lt;br /&gt;
&lt;br /&gt;
==== salpixmaputils====&lt;br /&gt;
&lt;br /&gt;
==== salprn ====&lt;br /&gt;
&lt;br /&gt;
====salrectangle====&lt;br /&gt;
&lt;br /&gt;
==== salvd ====&lt;br /&gt;
&lt;br /&gt;
=== Sal Window===&lt;br /&gt;
&lt;br /&gt;
==== salframe ====&lt;br /&gt;
Documentation in progress, from damiend :&lt;br /&gt;
[[User:Damiend|Damiend page]]&lt;br /&gt;
&lt;br /&gt;
====salobj====&lt;br /&gt;
&lt;br /&gt;
== TO BE IMPLEMENTED (missing in Aqua)==&lt;br /&gt;
&lt;br /&gt;
===Audio===&lt;br /&gt;
&lt;br /&gt;
====audioconvert====&lt;br /&gt;
 (obsolete?) &lt;br /&gt;
&lt;br /&gt;
====devaudio====&lt;br /&gt;
(obsolete?)&lt;br /&gt;
&lt;br /&gt;
====native sound====&lt;br /&gt;
&lt;br /&gt;
====salimpsound====&lt;br /&gt;
&lt;br /&gt;
====vsound====&lt;br /&gt;
&lt;br /&gt;
===i18n===&lt;br /&gt;
&lt;br /&gt;
===keysymnames===&lt;br /&gt;
&lt;br /&gt;
===saldisp===&lt;br /&gt;
&lt;br /&gt;
===sm===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[FIXME]: is session manager usefull?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Native Controls&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
====Scrollbar====&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Works as expected&amp;#039;&amp;#039;&amp;#039;. The most important work is done&lt;br /&gt;
&lt;br /&gt;
See : [[Mac_OS_X_Porting_-_Native_Controls#ScrollBar]]&lt;br /&gt;
&lt;br /&gt;
====DrawThemeButton() documentation====&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Started&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
See : [[Mac_OS_X_Porting_-_Native_Controls#ComboBox]]&lt;br /&gt;
&lt;br /&gt;
Started&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DrawThemeButton&lt;br /&gt;
Draws a button.&lt;br /&gt;
&lt;br /&gt;
OSStatus DrawThemeButton (&lt;br /&gt;
   const Rect * inBounds,&lt;br /&gt;
   ThemeButtonKind inKind,&lt;br /&gt;
   const ThemeButtonDrawInfo * inNewInfo,&lt;br /&gt;
   const ThemeButtonDrawInfo * inPrevInfo,&lt;br /&gt;
   ThemeEraseUPP inEraseProc,&lt;br /&gt;
   ThemeButtonDrawUPP inLabelProc,&lt;br /&gt;
   UInt32 inUserData&lt;br /&gt;
);&lt;br /&gt;
Parameters&lt;br /&gt;
inBounds&lt;br /&gt;
A pointer to a structure of type Rect. Pass a rectangle specifying the boundary of the button, in local coordinates.&lt;br /&gt;
&lt;br /&gt;
inKind&lt;br /&gt;
A value of type ThemeButtonKind. Pass a constant specifying the type of button to draw. &lt;br /&gt;
See “Theme Buttons” for descriptions of possible values.&lt;br /&gt;
&lt;br /&gt;
inNewInfo&lt;br /&gt;
A pointer to a structure of type ThemeButtonDrawInfo. Before calling DrawThemeButton, &lt;br /&gt;
set the structure to contain the new state, value, and adornment for the button. &lt;br /&gt;
DrawThemeButton uses the information passed in the inNewInfo and inPrevInfo parameters&lt;br /&gt;
to apply transitional animation or sound effects as the button state changes, if such are &lt;br /&gt;
specified under the current theme.&lt;br /&gt;
&lt;br /&gt;
inPrevInfo&lt;br /&gt;
A pointer to a structure of type ThemeButtonDrawInfo. If the button state is changing,&lt;br /&gt;
set the structure to contain the previous state, value, and adornment for the button, &lt;br /&gt;
to allow DrawThemeButton to apply any transitional effects. If the button state is not &lt;br /&gt;
changing, you can pass NULL.&lt;br /&gt;
&lt;br /&gt;
inEraseProc&lt;br /&gt;
A value of type ThemeEraseUPP. If you have a custom background, use this parameter to pass&lt;br /&gt;
a universal function pointer to an application-defined function such as that described in &lt;br /&gt;
ThemeEraseProcPtr. DrawThemeButton calls this function to erase the background before drawing&lt;br /&gt;
 the button. If you pass NULL, DrawThemeButton&amp;#039;s default behavior is to erase the background&lt;br /&gt;
 for you.&lt;br /&gt;
&lt;br /&gt;
inLabelProc&lt;br /&gt;
A value of type ThemeButtonDrawUPP. If you pass a universal function pointer to an &lt;br /&gt;
application-defined function such as that described in ThemeButtonDrawProcPtr, DrawThemeButton&lt;br /&gt;
 calls that function to draw the label of the button. If you pass NULL, no label is drawn.&lt;br /&gt;
&lt;br /&gt;
inUserData&lt;br /&gt;
An unsigned 32-bit integer. Provide any data to be passed in to the callback functions specified in &lt;br /&gt;
the inLabelProc and inEraseProc parameters. Pass NULL if you do not wish to provide any data.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
A result code. See “Appearance Manager Result Codes”.&lt;br /&gt;
&lt;br /&gt;
Discussion&lt;br /&gt;
The DrawThemeButton function draws a theme-compliant button. If a ThemeEraseProcPtr is &lt;br /&gt;
specified in the inEraseProc parameter, DrawThemeButton uses that function to erase the &lt;br /&gt;
background of the button before drawing the button. After the button is drawn, if a&lt;br /&gt;
ThemeButtonDrawProcPtr is specified in the inLabelProc parameter, DrawThemeButton calls&lt;br /&gt;
that function to draw the button’s label.&lt;br /&gt;
&lt;br /&gt;
Note that DrawThemeButton also draws any appearance adornments for the button and that these&lt;br /&gt;
can extend beyond the button’s basic bounding rectangle, as specified in the inBounds parameter,&lt;br /&gt;
and may be of variable shape. You may therefore wish to call the function&lt;br /&gt;
GetThemeButtonBackgroundBounds to obtain the actual rectangle containing the pixels belonging&lt;br /&gt;
to a button under the current theme.&lt;br /&gt;
&lt;br /&gt;
Version Notes&lt;br /&gt;
This function is available with Appearance Manager 1.1 and later.&lt;br /&gt;
&lt;br /&gt;
Availability&lt;br /&gt;
Available in CarbonLib 1.0 and later when Appearance 1.1 or later is present.&lt;br /&gt;
Available in Mac OS X 10.0 and later.&lt;br /&gt;
Declared In&lt;br /&gt;
Appearance.h&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====HIComboBoxCreate() documentation====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HIComboBoxCreate&lt;br /&gt;
Creates a combo box control.&lt;br /&gt;
&lt;br /&gt;
OSStatus HIComboBoxCreate (&lt;br /&gt;
   const HIRect* boundsRect,&lt;br /&gt;
   CFStringRef text,&lt;br /&gt;
   const ControlFontStyleRec* style,&lt;br /&gt;
   CFArrayRef list,&lt;br /&gt;
   OptionBits inAttributes,&lt;br /&gt;
   HIViewRef* outComboBox&lt;br /&gt;
);&lt;br /&gt;
Parameters&lt;br /&gt;
boundsRect&lt;br /&gt;
The bounding box of the control.&lt;br /&gt;
&lt;br /&gt;
text&lt;br /&gt;
The default text in the editable portion of the control. Can be NULL.&lt;br /&gt;
&lt;br /&gt;
style&lt;br /&gt;
The font style of the both editable text and the text in the disclosure list. Can be NULL.&lt;br /&gt;
&lt;br /&gt;
list&lt;br /&gt;
The default values available in the disclosure list. Can be NULL.&lt;br /&gt;
&lt;br /&gt;
inAttributes&lt;br /&gt;
The default attributes of the combo box. For possible values, see “Combo Box Attributes”.&lt;br /&gt;
&lt;br /&gt;
outComboBox&lt;br /&gt;
On exit, a pointer to a reference for the new control.&lt;br /&gt;
&lt;br /&gt;
Discussion&lt;br /&gt;
The combo box can be used in compositing mode, as well as traditional Control Manager mode.&lt;br /&gt;
When created, this view is invisible. To see the view, you must show the view by calling HIViewSetVisible.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== What is used for Linux, Windows, Mac OS X ...build ? ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[Description of the dependencies]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[Windows]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[MacOS X]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[Linux]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[Solaris]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Content of Aqua ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[Click here to see the complete list]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Content of vcl/inc&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Notes: &lt;br /&gt;
&lt;br /&gt;
1) Where to find includes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;foo/bar.hxx&amp;gt; means you can find bar.hxx in the foo module. The new style file is foo/inc/foo/bar.hxx, old style is foo/inc/bar.hxx and sometimes the file is somewhere else in the tree or generated. The deliver process copies/generates the file into solver at solver/680/build_type/inc/foo. Good for fixing broken builds. ;-)&lt;br /&gt;
&lt;br /&gt;
2) &lt;br /&gt;
suffix .h (for C calls or first version?) or .hxx (C++) &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;A) Family of includes&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
Looking more closely at the list brings to the fore (expression from dictionary ;-) ) that include names are&lt;br /&gt;
informatives. Most of the time, the name gives the function/role.&lt;br /&gt;
What is interesting is the files with name begining with &amp;quot;sal&amp;quot;. sal means System Abstraction Layer + include&amp;#039;s function (or explicit name). &lt;br /&gt;
&lt;br /&gt;
Partial list, for example:&lt;br /&gt;
&lt;br /&gt;
salatype.hxx&lt;br /&gt;
&lt;br /&gt;
salbmp.hxx&lt;br /&gt;
&lt;br /&gt;
salctrlhandle.hxx&lt;br /&gt;
&lt;br /&gt;
salctype.hxx&lt;br /&gt;
&lt;br /&gt;
salframe.hxx&lt;br /&gt;
&lt;br /&gt;
salgdi.hxx&lt;br /&gt;
&lt;br /&gt;
salgeom.hxx&lt;br /&gt;
&lt;br /&gt;
sallayout.hxx (main header for fonts services)&lt;br /&gt;
...&lt;br /&gt;
salmenu&lt;br /&gt;
salnativewidgets&lt;br /&gt;
...etc&lt;br /&gt;
&lt;br /&gt;
Other important families are &amp;quot;sv&amp;quot; and &amp;quot;uno&amp;quot; or &amp;quot;win&amp;quot; (window) prefixed. sal family will be analysed apart.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;B) Includes of includes&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Some includes are more important than other. To prove this, just have a look is sufficient: some are always needed, and some more rarely.&lt;br /&gt;
&lt;br /&gt;
To verify, a simple test to do in vcl/inc:&lt;br /&gt;
&lt;br /&gt;
egrep -H &amp;quot;#include&amp;quot; ./* | wc -l  gives me 681 lines ! And some of them are the same...&lt;br /&gt;
&lt;br /&gt;
To know more, the precedent command line can be modified to make appear the numerous call &lt;br /&gt;
to the same includes files.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
egrep -H &amp;quot;#include&amp;quot; ./* | cut -d&amp;quot;#&amp;quot; -f2 | sort &amp;gt; liste.txt&lt;br /&gt;
&lt;br /&gt;
The content of liste.txt is explicit: dllapi.h, sv.h and some other are very important, while some other includes are only one or two times used. We can see too that vos includes are numerous, even if vos is deprecated**&lt;br /&gt;
&lt;br /&gt;
 **see http://wiki.services.openoffice.org/wiki/Source_code_directories&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I&amp;#039;m nearly sure that a complete analysis of just this result will give us a lot of information.&lt;br /&gt;
&lt;br /&gt;
I propose to change the order of analysis starting with dllapi.h and sv.h.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[to be continued]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;B1) &amp;quot;sal&amp;quot; includes family&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
[[salinst.hxx]] This seems to be the main include file&lt;br /&gt;
&lt;br /&gt;
[[salatype.hxx]]&lt;br /&gt;
&lt;br /&gt;
[[salctrlhandle.hxx]]&lt;br /&gt;
&lt;br /&gt;
[[salctype.hxx]]&lt;br /&gt;
&lt;br /&gt;
[[salframe.hxx]]&lt;br /&gt;
&lt;br /&gt;
[[salgdi.hxx]]&lt;br /&gt;
&lt;br /&gt;
[[salgeom.hxx]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[ sallayout.hxx ]]&amp;#039;&amp;#039;&amp;#039; &amp;lt;-- see Native Fonts implementation&lt;br /&gt;
&lt;br /&gt;
[[salgtype.hxx]]&lt;br /&gt;
&lt;br /&gt;
[[vcl/inc/salobj.hxx]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;B2) Classicals includes&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
file: abstdlg.hxx [ means abstract dialog ]&lt;br /&gt;
&lt;br /&gt;
This includes does contain the following classes definitions:&lt;br /&gt;
&lt;br /&gt;
[FIXME] : choose a precise presentation template for classes &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
VclAbstractDialog,&lt;br /&gt;
&lt;br /&gt;
VclAbstractTerminateDialog, &lt;br /&gt;
&lt;br /&gt;
VclAbstractRefreshableDialog,&lt;br /&gt;
 &lt;br /&gt;
VclAbstractDialogFactory, &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
uses &amp;lt;tools/solar.h&amp;gt; , &amp;lt;tools/string.hxx&amp;gt; + &lt;br /&gt;
&lt;br /&gt;
&amp;quot;dllapi.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Note : dllapi.h is very interesting because when we have to find (for example) a library suffix, SAL_DLLEXTENSSION can replace all suffixes (every OS&amp;#039;s and archs). Just including sal/config.h does it ! &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Classes:&lt;br /&gt;
&lt;br /&gt;
Window -&amp;gt; what? [FIXME]&lt;br /&gt;
ResId -&amp;gt; what?&lt;br /&gt;
&lt;br /&gt;
Does contain the prototype of VclAbstractDialog, inherit of VCL_DLLPUBLIC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
file: dllapi.h [ dll for dynamic linked library ]&lt;br /&gt;
Uses: &amp;lt;sal/config.h&amp;gt; and &amp;gt;sal/types/h&amp;gt;&lt;br /&gt;
includes: VCL_DLLPUBLIC macro&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
file: accel.h [ means accelerator ]&lt;br /&gt;
&lt;br /&gt;
Classes:&lt;br /&gt;
&lt;br /&gt;
Accelerator &lt;br /&gt;
{&lt;br /&gt;
}&lt;br /&gt;
ImplAccelEntry &lt;br /&gt;
{&lt;br /&gt;
public members: &lt;br /&gt;
&lt;br /&gt;
Names&lt;br /&gt;
&lt;br /&gt;
mnId&lt;br /&gt;
maKeyCode&lt;br /&gt;
mpAccel&lt;br /&gt;
mpAutoAccel&lt;br /&gt;
mbEnabled&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function / returns / parameters&lt;br /&gt;
&lt;br /&gt;
ImplGetKeyCode / void / KeyFuncType eFunc, ref rCode1 , ref rCode2, ref rCode3&lt;br /&gt;
&lt;br /&gt;
file: accel.hxx &lt;br /&gt;
&lt;br /&gt;
Uses: &amp;lt;sv.h&amp;gt; , &amp;quot;dllapi.h&amp;quot; ,&amp;lt;tools/resid.hxx&amp;gt;, &amp;lt;&amp;lt;tools/rc.hxx&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Classes:&lt;br /&gt;
&lt;br /&gt;
ImplAccelData;&lt;br /&gt;
ImplAccelEntry;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Important Links ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[Progressive implementation]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Native Font server Implementation&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;[[Mac OS X Porting - Native Fonts]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Native Sound Implementation&amp;#039;&amp;#039;&amp;#039;: [[Mac OS X Porting - Native Audio and Video]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Native Printing Implementation&amp;#039;&amp;#039;&amp;#039;: [[Mac OS X Porting - Native_Printing]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Drag and Drop implementation&amp;#039;&amp;#039;&amp;#039;: [[Mac OS X Porting - Native Drag and drop]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Data Acquisition&amp;#039;&amp;#039;&amp;#039; : [[Mac OS X Porting - Data Acquisition]]&lt;br /&gt;
&lt;br /&gt;
This work is part of http://wiki.services.openoffice.org/wiki/Mac_OS_X_Porting_-_Work_Areas/Todo%27s&lt;br /&gt;
&lt;br /&gt;
[to be continued:-) ]&lt;br /&gt;
&lt;br /&gt;
== Keyboard comparizon between OpenOffice.org / Mac OS X  application ==&lt;br /&gt;
&lt;br /&gt;
[FIXME] redo a cleanest array &lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;vertical-align:top; text-align:centered; background-color:#F0F0F0;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#99CCFF; font-weight:bold;&amp;quot; &lt;br /&gt;
| Modifier||+ key  || Result || TextEdit  returns&lt;br /&gt;
|-&lt;br /&gt;
|ALT|| a||æ ||æ &lt;br /&gt;
|-&lt;br /&gt;
|ALT||b||ß ||ß&lt;br /&gt;
|-&lt;br /&gt;
|ALT||c||© ||©&lt;br /&gt;
|-&lt;br /&gt;
|ALT||d||∂ ||∂&lt;br /&gt;
|-&lt;br /&gt;
|ALT||e||ê ||ê&lt;br /&gt;
|-&lt;br /&gt;
|ALT||f||ƒ ||ƒ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||g ||ﬁ ||ﬁ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||h ||Ì ||Ì&lt;br /&gt;
|-&lt;br /&gt;
|ALT||i ||î ||î&lt;br /&gt;
|-&lt;br /&gt;
|ALT||j ||Ï ||Ï&lt;br /&gt;
|-&lt;br /&gt;
|ALT||k ||È ||È&lt;br /&gt;
|-&lt;br /&gt;
|ALT||l ||¬ ||¬&lt;br /&gt;
|-&lt;br /&gt;
|ALT||m ||µ ||µ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||n ||~ ||~&lt;br /&gt;
|-&lt;br /&gt;
|ALT||o ||œ ||œ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||p ||π ||π&lt;br /&gt;
|-&lt;br /&gt;
|ALT||q ||‡ ||‡&lt;br /&gt;
|-&lt;br /&gt;
|ALT||r ||® ||®&lt;br /&gt;
|-&lt;br /&gt;
|ALT||s ||Ò ||Ò&lt;br /&gt;
|-&lt;br /&gt;
|ALT||t ||† ||†&lt;br /&gt;
|-&lt;br /&gt;
|ALT||u ||º ||º&lt;br /&gt;
|-&lt;br /&gt;
|ALT||v ||◊ ||◊&lt;br /&gt;
|-&lt;br /&gt;
|ALT||w ||‹ ||‹&lt;br /&gt;
|-&lt;br /&gt;
|ALT||x ||≈ ||≈&lt;br /&gt;
|-&lt;br /&gt;
|ALT||y ||Ú ||Ú&lt;br /&gt;
|-&lt;br /&gt;
|ALT||z ||Â ||Â&lt;br /&gt;
|-&lt;br /&gt;
|ALT||A ||Æ ||Æ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||B ||∫ ||∫&lt;br /&gt;
|-&lt;br /&gt;
|ALT||C ||¢ ||¢&lt;br /&gt;
|-&lt;br /&gt;
|ALT||D||∆||∆&lt;br /&gt;
|-&lt;br /&gt;
|ALT||F ||· ||·&lt;br /&gt;
|-&lt;br /&gt;
|ALT||G ||ﬂ ||ﬂ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||H ||Î ||Î&lt;br /&gt;
|-&lt;br /&gt;
|ALT||I ||Î ||Î&lt;br /&gt;
|-&lt;br /&gt;
|ALT||J ||Í ||Í&lt;br /&gt;
|-&lt;br /&gt;
|ALT||K ||Ë ||Ë&lt;br /&gt;
|-&lt;br /&gt;
|ALT||L || &amp;lt;pre&amp;gt;|&amp;lt;/pre&amp;gt; ||&amp;lt;pre&amp;gt;|&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|ALT||M ||Ó ||Ó&lt;br /&gt;
|-&lt;br /&gt;
|ALT||N ||ı ||ı&lt;br /&gt;
|-&lt;br /&gt;
|ALT||O ||Œ ||Œ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||P ||∏ ||∏&lt;br /&gt;
|-&lt;br /&gt;
|ALT||Q ||Ω ||Ω&lt;br /&gt;
|-&lt;br /&gt;
|ALT||R ||‚ ||‚&lt;br /&gt;
|-&lt;br /&gt;
|ALT||S ||∑ ||∑&lt;br /&gt;
|-&lt;br /&gt;
|ALT||T ||™ ||™&lt;br /&gt;
|-&lt;br /&gt;
|ALT||U ||ª ||ª&lt;br /&gt;
|-&lt;br /&gt;
|ALT||V ||√ ||√&lt;br /&gt;
|-&lt;br /&gt;
|ALT||W ||› ||›&lt;br /&gt;
|-&lt;br /&gt;
|ALT||X ||⁄ ||⁄&lt;br /&gt;
|-&lt;br /&gt;
|ALT||Y ||Ÿ ||Ÿ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||Z ||Å ||Å&lt;br /&gt;
|-&lt;br /&gt;
|ALT||$ ||€ ||€&lt;br /&gt;
|-&lt;br /&gt;
|ALT||` ||@ ||@&lt;br /&gt;
|-&lt;br /&gt;
|ALT||£ ||# ||#&lt;br /&gt;
|-&lt;br /&gt;
|ALT||* ||¥ ||¥&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Sous réserve d&amp;#039;erreur ou omission [[User:Ericb|Ericb]] 00:05, 14 January 2007 (CET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[User:Ericb|Ericb]] 15:00, 22 Jul 2005 (EDT)&lt;br /&gt;
&lt;br /&gt;
[[Category:Porting]]&lt;br /&gt;
[[Category:MacOSX]]&lt;br /&gt;
[[Category:Aqua]]&lt;/div&gt;</summary>
		<author><name>Plipli</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=User:Ericb&amp;diff=28943</id>
		<title>User:Ericb</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=User:Ericb&amp;diff=28943"/>
		<updated>2007-03-25T07:27:00Z</updated>

		<summary type="html">&lt;p&gt;Plipli: /* What do we have to do? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Public Documentation License Notice==&lt;br /&gt;
&lt;br /&gt;
The contents of this Documentation (excepted Native Port Roadmap),are subject to the Public Documentation License Version 1.0 (the &amp;quot;License&amp;quot;); you may only use this Documentation if you comply with the terms of this License. A copy of the License is available at http://www.openoffice.org/licenses/PDL.html.&lt;br /&gt;
The Original Documentation is &amp;quot;Mac OS X native port&amp;quot;. The Initial Writer of the Original Documentation is (JCA) Eric Bachard (C) 2005-2006. All Rights Reserved. (Initial Writer contact(s): ericb@openoffice.org.)&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Mac OS X Native port&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;messagebox cleanup metadata&amp;quot; style=&amp;quot;border:1px solid blue;background-color:#B3FFF5;padding:7px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;The first Mac OS X native port objective is make OpenOffice.org run without X11 use, to make it a real Mac application.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;The second one is respect Aqua Human interface Guidelines&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; This is a long term work, and every help and/or contributions, like donations** are welcome.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 **see http://contributing.openoffice.org/index.html&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Native Port Roadmap&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;2006&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
* June 2006: work in progress &lt;br /&gt;
&lt;br /&gt;
- Basis: frame, instances, threads, drawing, painting, resizing (Stephan Schaefer, Tino Rachui)&lt;br /&gt;
&lt;br /&gt;
 Done: &lt;br /&gt;
 implement threads&lt;br /&gt;
 create, manage instance&lt;br /&gt;
 create, manage windows (including parents)&lt;br /&gt;
 create, manage events&lt;br /&gt;
 create manage drawing, resizing&lt;br /&gt;
 create, add menus (Pavel Janik)&lt;br /&gt;
 toggle window fullscreen (Pierre de Filippis)&lt;br /&gt;
 make font server work (Stephan Schaefer)&lt;br /&gt;
&lt;br /&gt;
* Current status font support (Stephan Schaefer, 2006/07/28): the following features are basically working now&lt;br /&gt;
** font selection&lt;br /&gt;
** font size&lt;br /&gt;
** simple font attributes (bold, italic)&lt;br /&gt;
&lt;br /&gt;
 Next step: document first part, and propose design&lt;br /&gt;
&lt;br /&gt;
- native filepicker (Pavel Janik, Florian Heckl)&lt;br /&gt;
&lt;br /&gt;
- native printing implementation (Oliver?)&lt;br /&gt;
&lt;br /&gt;
- native font implementation (Eric Bachard)&lt;br /&gt;
&lt;br /&gt;
* September 2006: &lt;br /&gt;
&lt;br /&gt;
- first proofs of concept: fonts, filepicker .. (more?)&lt;br /&gt;
- show the results (OOoCon 2006?)&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;2007&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
* January 2007: first alpha implementation&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Strategy for native port&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Possible Actions&amp;#039;&amp;#039;&amp;#039;: &lt;br /&gt;
&lt;br /&gt;
Identify us:&lt;br /&gt;
&lt;br /&gt;
#Complete the arrays below&lt;br /&gt;
#Update photos on frapr.com?&lt;br /&gt;
&lt;br /&gt;
Share the work:&lt;br /&gt;
&lt;br /&gt;
#Divide the work between little Teams&lt;br /&gt;
#Update Todo list regularly -&amp;gt; needs some love these days ... [http://wiki.services.openoffice.org/wiki/Mac_OS_X_Porting_-_Work_Areas/Todo%27s]&lt;br /&gt;
&lt;br /&gt;
Help:&lt;br /&gt;
&lt;br /&gt;
#Teach tools between us&lt;br /&gt;
#Do a debug party on IRC&lt;br /&gt;
#write documentation&lt;br /&gt;
&lt;br /&gt;
Meet us:&lt;br /&gt;
&lt;br /&gt;
#IRC&lt;br /&gt;
#Mac Meeting (like nov2005 in Hamburg?)&lt;br /&gt;
&lt;br /&gt;
Inform:&lt;br /&gt;
&lt;br /&gt;
#Update website regularly&lt;br /&gt;
#Blogs&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;WHO&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
Mac Team:&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;vertical-align:top; text-align:left; background-color:#efefef;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#d6d6d6;font-weight:bold;&amp;quot; &lt;br /&gt;
|Developer \ skills || build || write code || code review || debug/trace (higher is better) || contribute to documentation ||&lt;br /&gt;
|-&lt;br /&gt;
|ericb|| x || x || || 1 || x ||&lt;br /&gt;
|-&lt;br /&gt;
|pjanik|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|ssa|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|maho|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|tinor|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|schmidtm|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|ebischoff|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|obr|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|cl|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|aliscafo|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|fheckl|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Fridrich|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|plipli|| || x || || || x ||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Other resources&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
fonts: ?&lt;br /&gt;
&lt;br /&gt;
events: ?&lt;br /&gt;
&lt;br /&gt;
QA: James McKenzie leads QA for the Mac OS X port of OpenOffice.org and is looking for volunteers to spread this effort over several people and needs people from all over the world to test various languages.&lt;br /&gt;
&lt;br /&gt;
graphical: ?&lt;br /&gt;
&lt;br /&gt;
Communication: ?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;WHAT&amp;#039;&amp;#039;&amp;#039;: Status of most important tasks&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;vertical-align:top; text-align:left; background-color:#efefef;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#d6d6d6;font-weight:bold;&amp;quot; &lt;br /&gt;
| Task || Names|| Urgency (1=higher)|| Work in Progress || Done || Code review || Debug || Integration || &lt;br /&gt;
|-&lt;br /&gt;
|Get rid of X11||done || 1 || x || x || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Bundle|| || 1 || x || || || || | ||&lt;br /&gt;
|-&lt;br /&gt;
|Drawing|| || 1 || x || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Fonts||plipli || 1 || x || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Events management|| || 2 || x || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Controls (see list) ||ericb, aliscafo || 2 || x || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Native FilePicker||Florian Heckl, Pavel Janik || 3 || x || x || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Native Printing||Yvan Barthelemy || 3 || x || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Native SpellChecker|| || 4 || || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Player||Mox Soini || 4 || x || || || || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Other tasks:&lt;br /&gt;
&lt;br /&gt;
Help for writing bug lists, status of bugs ..etc&lt;br /&gt;
&lt;br /&gt;
Write howto use gdb, leaks, other tools&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;WHEN&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
From Christian Lippka (last meeting, 25th of august 2006): &lt;br /&gt;
 Aug 26 00:21:38 ChristianL&lt;br /&gt;
 from my point of view what is missing for point 1:&lt;br /&gt;
 text layout, complete font support, keyboard support,&lt;br /&gt;
 fixing repaint issues, having aqua install and run out of the box&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;September 2006&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Present the current state of the project at the 2006 OpenOffice conference in Lyon and Paris&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Late 2006&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
fix OpenOffice.org launch&lt;br /&gt;
fix drawing (repainting)&lt;br /&gt;
Implement missing methods and fix most important bugs (mainly the one leading to crash) in:&lt;br /&gt;
ATS&lt;br /&gt;
Salgraphics&lt;br /&gt;
Salinstance&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;January or February 2007&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
make Java work (works partially)&lt;br /&gt;
make intensive debug&lt;br /&gt;
present something working as alpha&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;June 2007	&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Implementation of:&lt;br /&gt;
native filepicker&lt;br /&gt;
native printing&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Become a Domain Developer for Mac OS X port&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
People regularly contributing to Mac OS x port with regular and quality patches are, after proposal, invited to become a [[DomainDeveloper]].&lt;br /&gt;
&lt;br /&gt;
The purpose of this document is to clearly define all the steps to become a [[DomainDeveloper]]. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Preliminary :  step 1 in  [[Commit_Rights]] must be completed and checked, and you must be in the list of [[http://www.openoffice.org/FAQs/faq-licensing.html#jca1 JCA Licensed people]]&lt;br /&gt;
&lt;br /&gt;
=== Steps for ssh2 key to be uploaded ===&lt;br /&gt;
&lt;br /&gt;
==== Create the key ====&lt;br /&gt;
&lt;br /&gt;
Everything is described here : [[http://www.openoffice.org/scdocs/ddSSHGuide.html SSH Guide]] &lt;br /&gt;
&lt;br /&gt;
==== Upload the key ====&lt;br /&gt;
&lt;br /&gt;
You must create an issue, like described below  :&lt;br /&gt;
&lt;br /&gt;
Component : www&lt;br /&gt;
&lt;br /&gt;
Sub Component : openoffice.org cvs&lt;br /&gt;
&lt;br /&gt;
Title : CVS Commit access request&lt;br /&gt;
&lt;br /&gt;
Add louis ( Louis Suarez Potts) or st ( Stefan Taxhet ) on CC&lt;br /&gt;
&lt;br /&gt;
Upload your ssh2 public key respecting the process ( Attach a DSA key, not an RSA )&lt;br /&gt;
&lt;br /&gt;
A project lead will confirm your request &lt;br /&gt;
&lt;br /&gt;
Then the support will upload your key&lt;br /&gt;
&lt;br /&gt;
Once done the issue is set to Fixed , and the next step has to be verified before &amp;#039;&amp;#039;&amp;#039;you&amp;#039;&amp;#039;&amp;#039; close it.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;EXAMPLE&amp;#039;&amp;#039;&amp;#039; : [[http://www.openoffice.org/issues/show_bug.cgi?id=75291 Upload SSH2 Key for Etsushi Kato]]&lt;br /&gt;
&lt;br /&gt;
==== Verify it works ====&lt;br /&gt;
&lt;br /&gt;
You now can try to connect via tunnel, and follow instructions given [[http://www.openoffice.org/scdocs/ddSSHGuide.html SSH Guide]] &lt;br /&gt;
&lt;br /&gt;
If something goes wrong, ask for help to support, with a maximum of details, to solve the problem.&lt;br /&gt;
&lt;br /&gt;
Once it works, the issue can be closed, and you can e.g. test downloading a module from tunnel repository :&lt;br /&gt;
&lt;br /&gt;
First create a tunnel with the command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh -2 -x -L 2401:localhost:2401 tunnel@openoffice.org&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then in a new window:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export CVSROOT=&amp;quot;:pserver:your_login@localhost:/cvs&amp;quot;&lt;br /&gt;
&lt;br /&gt;
cvs login ( enter )&lt;br /&gt;
&lt;br /&gt;
(your password )&lt;br /&gt;
&lt;br /&gt;
mkdir TEST&lt;br /&gt;
&lt;br /&gt;
cd TEST&lt;br /&gt;
&lt;br /&gt;
cvs -z4 co -r SRC680_m205 vcl &lt;br /&gt;
&lt;br /&gt;
cd vcl &lt;br /&gt;
&lt;br /&gt;
cat CVS/Root  -&amp;gt; should indicate : your local repository&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ask for CVS access for all modules required ===&lt;br /&gt;
&lt;br /&gt;
Two steps : create an issue is mandatory because the concerned project is tools, and because people can have only ssh2 key without being [[DomainDeveloper]].&lt;br /&gt;
&lt;br /&gt;
==== Create an issue ====&lt;br /&gt;
&lt;br /&gt;
You must create an issue, described below  :&lt;br /&gt;
&lt;br /&gt;
Component : tools&lt;br /&gt;
&lt;br /&gt;
Sub Component : www&lt;br /&gt;
&lt;br /&gt;
Title : CVS access to all modules required&lt;br /&gt;
&lt;br /&gt;
Assigned to mh  +  CC for ericb and/or pjanik&lt;br /&gt;
&lt;br /&gt;
Present yourself quickly, and ask the access&lt;br /&gt;
&lt;br /&gt;
A project lead will confirm&lt;br /&gt;
&lt;br /&gt;
An admin will confirm this is ok, and set the issue to Fixed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;EXAMPLE&amp;#039;&amp;#039;&amp;#039; : [[http://www.openoffice.org/issues/show_bug.cgi?id=75494 CVS Access all modules for Etsushi Kato]]&lt;br /&gt;
&lt;br /&gt;
==== Verify ====&lt;br /&gt;
&lt;br /&gt;
Create the tunnel :&lt;br /&gt;
&lt;br /&gt;
open a terminal and type :&lt;br /&gt;
&lt;br /&gt;
ssh -2 -x -L 2401:localhost:2401 tunnel@openoffice.org&lt;br /&gt;
&lt;br /&gt;
once logged in, open a new terminal, and do ( for example ):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd $OOO_SRC_ROOT/&lt;br /&gt;
&lt;br /&gt;
source MacOSXPPCEnv.Set.sh  { source MacOSXX86Env.Set.sh for Mac Intel }&lt;br /&gt;
&lt;br /&gt;
cd vcl  ( for example )&lt;br /&gt;
&lt;br /&gt;
IMPORTANT : be sure vcl has been checked from tunnel, not from anoncvs ( cat CVS/Root will give you the answer )&lt;br /&gt;
&lt;br /&gt;
export CWS_WORK_STAMP=aquavcl01   # Only needed for working with [[EIS]], can change for a different CWS ;) &lt;br /&gt;
&lt;br /&gt;
cd aqua/source/gdi&lt;br /&gt;
&lt;br /&gt;
add your changes to your_file.cxx, then commit :&lt;br /&gt;
&lt;br /&gt;
cvs commit -m &amp;quot;#i75689# bla bla ... the reason of the modification(s)&amp;quot;  your_file.cxx  # The #i75689# is an issue number in the tracker&lt;br /&gt;
&lt;br /&gt;
cvs update&lt;br /&gt;
&lt;br /&gt;
If nothing is wrong, cvs update should not return M for your_file.cxx, means the commit is successfull.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
In case of problem, use the issue until it is fixed&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;#039;&amp;#039;&amp;#039;Welcome aboard :)&amp;#039;&amp;#039;&amp;#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;2nd Mac porters meeting&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
This section has been moved to [[2nd Mac porters meeting]]&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;IRC Mac port meetings&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
This section has been moved to [[MacOSXPortMeetings]].&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Mac OS X (X11) Quality Assurance&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
This section has been moved to [[Mac OS X ( X11) Quality Assurance]]&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Mac OS X Implementing HIView&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
This section has been moved to [[Mac OS X Implementing HIView ]]&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Debug OpenOffice.org using XCode &amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
[[ MacOSX Debug OpenOffice.org using XCode]]&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Description of the Native Port problem&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
=== How does OpenOffice.org work on Mac OS X? ===&lt;br /&gt;
&lt;br /&gt;
Currently, on Mac OS X, OpenOffice.org uses X11, as &amp;quot;client&amp;quot;: X11 is a graphical server, coming from Unix world, and able to run under Linux, *BSD, Solaris, Mac OS X.&lt;br /&gt;
&lt;br /&gt;
 - X11 is run as an application, managed like other Apple applications.&lt;br /&gt;
 - All unix like applications are managed by X11, and from Aqua environment, only X11 is seen as only one applicatiion, &lt;br /&gt;
  even if other Unix/Linux (e.g.) applications are runing.&lt;br /&gt;
&lt;br /&gt;
OpenOffice.org asks X11 to display a window, waits for X11 acknowledgment, and OpenOffice.org displays the window. All transactions use the network, locally or not. the same mechanism is used for everything to be displayed.&lt;br /&gt;
&lt;br /&gt;
[[User:Ericb|Ericb]] 11:39, 3 June 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
=== Issues and known problems ===&lt;br /&gt;
&lt;br /&gt;
All events are managed by OpenOffice.org and X11, using the Xlib&lt;br /&gt;
&lt;br /&gt;
Only .ttf fonts type is currently available. Note: &amp;#039;&amp;#039;&amp;#039;system fonts are available &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
The rendering is made by X11, not by Mac OS X rendering engine.&lt;br /&gt;
&lt;br /&gt;
X11 and all its clients are seen as one application only: drag and drop protocol does not work because of that (solution: Pasteboard Manager)&lt;br /&gt;
&lt;br /&gt;
==== Other links ====&lt;br /&gt;
&lt;br /&gt;
http://wiki.services.openoffice.org/wiki/List_of_OpenOffice.org_Mac_OS_X_issues_and_problems#&lt;br /&gt;
&lt;br /&gt;
http://wiki.services.openoffice.org/wiki/Printing_problems_with_OpenOffice.org_2.0_for_Mac_OS_X#Reporting_printing_problems&lt;br /&gt;
&lt;br /&gt;
[[User:Ericb|Ericb]] 11:39, 3 June 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
== What do we have to do?==&lt;br /&gt;
&lt;br /&gt;
* (in progress) : Implement direct access to Apple graphical engine, using Apple API: Quartz2D/CoreGraphics (and replacing Xlib use)&lt;br /&gt;
&lt;br /&gt;
like: instantiate, manage events and threads for a graphical instance + all needed objects, drawing: manage all drawing cases&lt;br /&gt;
&lt;br /&gt;
* (in progress) : Implement native events management, using CarbonEventManager (replacing Xlib management)&lt;br /&gt;
&lt;br /&gt;
* (in progress) : Implement native font use, using Apple Type Server and ATSUI (for Unicode Imagery) (replacing X11 management)&lt;br /&gt;
&lt;br /&gt;
Work in progress: [[Mac OS X Porting - Native Fonts]]&lt;br /&gt;
&lt;br /&gt;
* Implement native sound, using QuickTime (replacing Java Media Framework): [[Mac OS X Porting - Native Audio and Video]]&lt;br /&gt;
&lt;br /&gt;
* Implement native Drag and drop, Implementing Pasteboard Manager: [[Mac OS X Porting - Native Drag and drop]]&lt;br /&gt;
&lt;br /&gt;
* (done experimental) Implement Native Filepicker&lt;br /&gt;
&lt;br /&gt;
* Implement Native Printing: current uses cups, but native printing is mandatory: [[Mac OS X Porting - Native_Printing]]&lt;br /&gt;
&lt;br /&gt;
* Implement Apple Spellchecker&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Where is located the code to be modified?&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
Most of the changes are located in vcl (Visual Class Layer), for everything graphical, events, fonts, rendering and printing.&lt;br /&gt;
&lt;br /&gt;
Other, for sound and movies will be in avmedia (where the player is implemented in OpenOffice.org sources).&lt;br /&gt;
&lt;br /&gt;
For drag and drop, dtrans is concerned (Pasteboard Manager implementation)&lt;br /&gt;
&lt;br /&gt;
[FIXME]: Filepicker? Apple Spellchecker?&lt;br /&gt;
&lt;br /&gt;
[[User:Ericb|Ericb]] 11:39, 3 June 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;How will the new implementation be tested?==&lt;br /&gt;
&lt;br /&gt;
Currently, all openOffice.org code can be compiled without using the Xlib. but of course, a lot of features are missing,&lt;br /&gt;
&lt;br /&gt;
and the final package simply won&amp;#039;t work&lt;br /&gt;
&lt;br /&gt;
In vcl module&amp;quot;, a &amp;#039;&amp;#039;&amp;#039;toy&amp;#039;&amp;#039;&amp;#039; called svdem is built at buildtime. This binary is linked to libvcl* and so all new stuff can be tested.&lt;br /&gt;
&lt;br /&gt;
e.g. : draw anti-aliased lines works well. &lt;br /&gt;
&lt;br /&gt;
Everything implemented in aqua vcl code will be included in libvclplug_aqua, and svdem source code will contain a specific part to proceed tests.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;messagebox cleanup metadata&amp;quot; style=&amp;quot;border:1px solid blue;background-color:#B3FFF5;padding:7px;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;The magic is: when all needed features will work with svdem, it will work in the new version of OpenOffice.org !!&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[FIXME]: add more complete list of features to implement and test.&lt;br /&gt;
&lt;br /&gt;
== AquaVCL 01 cws ==&lt;br /&gt;
&lt;br /&gt;
[[http://qa.openoffice.org/issues/buglist.cgi?keywords=aqua Top 10 of Aqua issues]]&lt;br /&gt;
&lt;br /&gt;
[[Aquavcl01 tasks]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Changelog ===&lt;br /&gt;
&lt;br /&gt;
====Work in progresss : alpha 0.6 ====&lt;br /&gt;
&lt;br /&gt;
Started (19th March ) : &lt;br /&gt;
&lt;br /&gt;
Michael Sicotte proposed to investigate in timers, and continue [[http://www.openoffice.org/issues/show_bug.cgi?id=75228 Pavel&amp;#039;s work]] : objective is to replace obsolete code.  ( 23th March)&lt;br /&gt;
&lt;br /&gt;
[experimental] plipli proposed a patch for a new salframe implementation, using HIView + optionally compositing  (21th March )&lt;br /&gt;
&lt;br /&gt;
[commit scheduled] Michael Sicotte proposed a complete patch for invert() ( SAL_INVERT SAL_INVERT_50 and SAL_INVERT_TRACKFRAME )  (20th March )&lt;br /&gt;
&lt;br /&gt;
Tino proposed to work on code cleanup in salatsuifontutils.cxx, removing obsolete code &lt;br /&gt;
&lt;br /&gt;
ismael and michael work on invert() + drawAlphaRect() &lt;br /&gt;
&lt;br /&gt;
Damien started to work on drawEPS() &lt;br /&gt;
&lt;br /&gt;
plipli and ericb work on refresh&lt;br /&gt;
&lt;br /&gt;
==== alpha 0.5====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Top 10 Summary :  7 issues over 10 are fixed or very close to be : &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;time to code review, tracing, and search for memory leaks&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[done] Unicode input in salframe ( ekato ) ( 19th March )&lt;br /&gt;
&lt;br /&gt;
[experimental, works partially] beginning of HIView + HIComboxes works (text still missing)  (ericb + plipli)  ( 14th March ) &lt;br /&gt;
&lt;br /&gt;
[done] replace NewRgn() in salframe (ericb (11th March )&lt;br /&gt;
&lt;br /&gt;
[experimental, but very interesting] Improved native windows ( ismael ) ( 7th March )&lt;br /&gt;
&lt;br /&gt;
====alpha 0.4==== &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[Informative]&amp;#039;&amp;#039;&amp;#039; build runs with Leopard 9A377a ( fheckl ) ( 7th March ) &lt;br /&gt;
&lt;br /&gt;
Refresh screen issues  (plipli) (4th to 10th March )&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[informative]&amp;#039;&amp;#039;&amp;#039;  plipli announced  progress with refresh screen issues  ( 28th February )&lt;br /&gt;
&lt;br /&gt;
[experimental, not yet commited] Proxy configuration from system ( pjanik)  ( 28th February )&lt;br /&gt;
&lt;br /&gt;
[done] highlighted native button ( pjanik)  ( 27th February ) &lt;br /&gt;
&lt;br /&gt;
Native File Picker works ( fheckl  / pjanik )  ( 23th February  )&lt;br /&gt;
&lt;br /&gt;
====alpha 0.3====&lt;br /&gt;
&lt;br /&gt;
Cursor does appear -&amp;gt; invert() + setting a setBlinkTime value in UpdateSettings()  (pjanik /ericb ) &lt;br /&gt;
&lt;br /&gt;
[done] mirroring negative images (ismael) + DrawAlphaBitmap() + CreateWithMask()&lt;br /&gt;
&lt;br /&gt;
pjanik patch for Focus Events &lt;br /&gt;
&lt;br /&gt;
[done] scrolling works ( pjanik ) (17th February )&lt;br /&gt;
&lt;br /&gt;
[done ] carret works ( plipli) (17th February )&lt;br /&gt;
&lt;br /&gt;
[done] checkbuttons fix for checkmarks  (ericb) ( 17th February )&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[Informative]&amp;#039;&amp;#039;&amp;#039; Pavel Janik propose to solve offScreen buffer using HIView ( 17th February ) &lt;br /&gt;
&lt;br /&gt;
[experimental, never commited] patch for macosxrc.txt use + UpdateSettings() use in salframe.cxx ( ericb ( 16th February )&lt;br /&gt;
&lt;br /&gt;
Michael Sicotte joined the Team ( 15th February )&lt;br /&gt;
&lt;br /&gt;
invert() : first try  (ericb)   ( 13th february )&lt;br /&gt;
&lt;br /&gt;
====alpha 0.2====&lt;br /&gt;
&lt;br /&gt;
[12th February 2007 ]&lt;br /&gt;
&lt;br /&gt;
[done] calc does not start : bug identified by tino , first workaround (ericb)   [[http://www.openoffice.org/issues/show_bug.cgi?id=73691 issue 73691]]&lt;br /&gt;
&lt;br /&gt;
[done] bitmaps in native popup menus (ismael)  &lt;br /&gt;
&lt;br /&gt;
[done]  replace obsolete code for HandleWindowPaintEvent(), newRgn() .. etc  (ericb)  (12th February)&lt;br /&gt;
&lt;br /&gt;
correct salatslayout patch (plipli)  ( 11th February)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[Informative]&amp;#039;&amp;#039;&amp;#039;  Michel Renon proposed a summary about his work on fonts issues&lt;br /&gt;
&lt;br /&gt;
[patch] Pavel fixed several menu crashes (09th February )&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[Informative]&amp;#039;&amp;#039;&amp;#039; : Pavel posted a mail about several crashes origin &lt;br /&gt;
 &lt;br /&gt;
patch for radioboxes and checkboxes ( ericb ) (9th February)&lt;br /&gt;
&lt;br /&gt;
first complete patch for salatslayout.cxx ( plipli) ( 9th February )&lt;br /&gt;
&lt;br /&gt;
[done] most important crashes fixed ( pjanik)  ( 09th february )&lt;br /&gt;
&lt;br /&gt;
Modified baseline for 2.2. : Mac OS X10.4 -&amp;gt; Aqua will be 10.4 and 10.5 compatible only ( ericb)&lt;br /&gt;
&lt;br /&gt;
first try with multi line sallayout (plipli )  ( 08th February )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Damien Duportal joined the Team ( 7th February ) &lt;br /&gt;
&lt;br /&gt;
[done] scrollbar changes (ericb )   ( 4th February )&lt;br /&gt;
&lt;br /&gt;
====alpha 0.1====&lt;br /&gt;
&lt;br /&gt;
create Top 10 of issues before alpha  3rd February 2007 :  See : [[http://porting.openoffice.org/mac/news/2007/20070203toptenbeforealpha.html Top 10 of issues]]&lt;br /&gt;
&lt;br /&gt;
[experimental, not commited] patch for TPT() implementation (ericb)  ( 2nd February 2007 )&lt;br /&gt;
&lt;br /&gt;
Pavel Janik proposed to implement TransformProcessType() ( 2nd February 2007 )&lt;br /&gt;
&lt;br /&gt;
[not commited] implement UpdateSettings()   (ericb)  &lt;br /&gt;
&lt;br /&gt;
Pavel Janik resynchronized aquavel01 cws  with m202  ( 2nd February 2007 )&lt;br /&gt;
&lt;br /&gt;
====alpha 0.03====&lt;br /&gt;
&lt;br /&gt;
Michel Renon joined the Team (1st February )&lt;br /&gt;
&lt;br /&gt;
[done] fix checkbuttons and radiobuttons issues: offsets, redrawing of the check marks ( ericb) &lt;br /&gt;
&lt;br /&gt;
[done] fix scrollbar buttons (implement correct methods to retrieve dimensions)&lt;br /&gt;
&lt;br /&gt;
[done] implement mapfiles for Mac OS X (Stephan Bergmann, Daniel Boelzle, Tino Rachui , Pavel Janik)&lt;br /&gt;
&lt;br /&gt;
====alpha 0.02====&lt;br /&gt;
&lt;br /&gt;
[done] modify libsalsystools.dylib to be correctly loaded with the bundle  (ericb, + pjanik)&lt;br /&gt;
&lt;br /&gt;
[done] add mouse drag events  ( pjanik )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====alpha 0.01====&lt;br /&gt;
&lt;br /&gt;
[done] add new feature for Aqua windows, to allow QuickTime player use( mox )&lt;br /&gt;
&lt;br /&gt;
[done] replace obsolete code in salframe.cxx with (ericb)&lt;br /&gt;
&lt;br /&gt;
[done] fix correct size for main window (GetOptimaWindowSize()  ) (ericb)&lt;br /&gt;
&lt;br /&gt;
[done] fix alpha channel in pixmaps (ismael)&lt;br /&gt;
&lt;br /&gt;
====alpha 0.0====&lt;br /&gt;
&lt;br /&gt;
[done] pushbutton where not correctly drawn (ericb)&lt;br /&gt;
&lt;br /&gt;
[done] fix missing mouse events  (pjanik)&lt;br /&gt;
&lt;br /&gt;
[done] fix nRepeat in text entry  (ssa)&lt;br /&gt;
&lt;br /&gt;
2nd Mac porters Meeting&lt;br /&gt;
&lt;br /&gt;
===Work in progress ===&lt;br /&gt;
&lt;br /&gt;
URGENT :&lt;br /&gt;
&lt;br /&gt;
Top of issues causing crashes : event issue when tips is enabled causes crashes ( well known window / handler  / window desctructor / event loop bug )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Salatsuifontutils :  replace old code, track leaks : tino&lt;br /&gt;
&lt;br /&gt;
[done] Bitmaps : ( isma87) &lt;br /&gt;
&lt;br /&gt;
[running]  Crashes : (tino, pjanik, ericb, isma87, plipli )&lt;br /&gt;
&lt;br /&gt;
[???] Drag and drop :   (vijay)&lt;br /&gt;
&lt;br /&gt;
[???] Printing   (ybart)  &lt;br /&gt;
&lt;br /&gt;
Florian Heckl proposed a subject for Google Summer of Code about native printing&lt;br /&gt;
&lt;br /&gt;
Drawing/ windowing ( plipli / ericb ) -&amp;gt; mainly refresh &lt;br /&gt;
&lt;br /&gt;
[done] Implement cursor &lt;br /&gt;
&lt;br /&gt;
[started] Native Controls   (ericb) &lt;br /&gt;
&lt;br /&gt;
[work in progress] partial multiline sallayout  (plipli )&lt;br /&gt;
&lt;br /&gt;
To do : &lt;br /&gt;
&lt;br /&gt;
(started, Oliver) - modify the tree to make the bundle start without hack ( issue fixed during buildtime) &lt;br /&gt;
&lt;br /&gt;
(started, Florian Heckl)  verify Native FilePicker implementation ( works , tested in Hamburg  )&lt;br /&gt;
&lt;br /&gt;
[done] Ismael Merzaq)  implement blit functions in salgdi  ( important fix:  probably apha version to be tested once done) &lt;br /&gt;
&lt;br /&gt;
[done] Sebastien Plisson- update the missing functions list ( fonts ... ask hdu &amp;amp; cl&lt;br /&gt;
&lt;br /&gt;
[started] ericb, Mox Soini, Sebastien Plisson, Tino Rachui, Pavel janik continue to replace obsolete code&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
fix crashes with menus  (started : tino )&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Sort of documentation about VCL around Native Mac OS X port&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Do we really need to understand how it works? ;-)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vcl content:&lt;br /&gt;
&lt;br /&gt;
ls -laR | wc -l&lt;br /&gt;
  1750&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; Uff 1750 files to analyse :-/&lt;br /&gt;
&lt;br /&gt;
Our purpose is to describe the vcl organisation. The content of vcl is so important, that at the begining, the content will looks a bit confused. e.g. class names ..etc have nothing to do, only description with words and sense, but this will need some time before we can understand everything.&lt;br /&gt;
&lt;br /&gt;
How analyse with more efficiency? After some months to anlalyse &amp;#039;&amp;#039;&amp;#039;&amp;quot;horizontaly&amp;quot;&amp;#039;&amp;#039;&amp;#039;, it appears that list all the content of a directory is not the solution. Of course, we learned a lot, but we now have to complete with &amp;#039;&amp;#039;&amp;#039;&amp;quot;orthogonal&amp;quot;&amp;#039;&amp;#039;&amp;#039; method (compared to the previous one). The first method wasn&amp;#039;t obviously not the good/best way to describe vcl.&lt;br /&gt;
 &lt;br /&gt;
[FIXME] a different approach (will ask confirmation to Philipp Lohman), could be a description of how it work in runtime. First define what an instance is, a frame, and what exactly is concerned by such &amp;quot;objects&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
With that, we can write a list of different objects all using the same scheme: empty boxes (means pure virtual methods and classes in generic libvvcl), really implemented in the specific part, and finally, the API &amp;quot;encapsulated&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The most difficult is to see where the API is used. But for all the parts, this is the same.&lt;br /&gt;
&lt;br /&gt;
Finally, &amp;#039;&amp;#039;&amp;#039;what is important is the design of vcl&amp;#039;&amp;#039;&amp;#039;. Which &amp;#039;&amp;#039;&amp;#039;patterns&amp;#039;&amp;#039;&amp;#039; are used? What are the dependencies, how works the stack for the events, how works the scheduler, the timers too is very important, even fundamental for Aqua implementation. Will have a look at gsl mailing list, and other resources. Probably everything is already (randomly) written somewhere.&lt;br /&gt;
&lt;br /&gt;
=== VCL organisation ===&lt;br /&gt;
&lt;br /&gt;
Thank&amp;#039;s to Philipp Lohmann for this short, but precise description:&lt;br /&gt;
&lt;br /&gt;
Basically vcl is divided in the system dependent and the system independent part. The interface between these two is mostly the Sal interface (every interface name Sal*: SalInstance, SalFrame, SalGraphics, SalPrinter, etc.).&lt;br /&gt;
&lt;br /&gt;
SalInstance is a factory that can create all the other abstracted interfaces of the system dependent part. It also provides the main loop SalInstance::Yield()&lt;br /&gt;
&lt;br /&gt;
SalFrame abstracts any kind of system window.&lt;br /&gt;
&lt;br /&gt;
SalVirtualDevice abstracts an offscreen window (e.g. a Pixmap on X11)&lt;br /&gt;
&lt;br /&gt;
SalPrinter and SalInfoPrinter abstract the system print queues where SalInfoPrinter is for querying and SalPrinter for actual printing.&lt;br /&gt;
&lt;br /&gt;
SalGraphics is an interface produced by either SalFrame, SalVirtualDevice or SalPrinter which is used for actual drawing operations (text, bitmaps, vector graphics)&lt;br /&gt;
&lt;br /&gt;
SalSound is for sound playing.&lt;br /&gt;
&lt;br /&gt;
SalBitmap provides memory for bitmap graphics as well as methods converting this memory to a system handle (e.g. a Pixmap on X11).&lt;br /&gt;
&lt;br /&gt;
SalOpenGL provides OpenGL functionality if available.&lt;br /&gt;
&lt;br /&gt;
SalTimer is an interface for periodically triggering the event queue (to timer implementation).&lt;br /&gt;
&lt;br /&gt;
SalI18NImeStatus handles how the status window of an Input Method Editor (IME) should display (this is mainly X11 specific).&lt;br /&gt;
&lt;br /&gt;
SalSystem has some system specific methods that did not belong anywhere else:-)&lt;br /&gt;
&lt;br /&gt;
Of all these there interfaces is at least one implementation per system (Windows, X11 or Mac). The Unix implementation also has a plugin concept to allow for integration of different native toolkits (currently gtk and Qt) which became necessary for the implementation of Native Widget Framework (NWF) to display controls like their normal desktop counterparts.&lt;br /&gt;
&lt;br /&gt;
Basically the independent part (what is beneath vcl/source directory) has generic methods for drawing, window handling and stuff which it brings into a suitable form and then delegates to the system specific implementation (located beneath vcl/win for Windows and vcl/unx for the X11 platforms).&lt;br /&gt;
&lt;br /&gt;
[[User:Ericb|Ericb]] 16:12, 1 July 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
===Sub-directories description ===&lt;br /&gt;
&lt;br /&gt;
==== &amp;#039;&amp;#039;&amp;#039;Organisation of vcl directories&amp;#039;&amp;#039;&amp;#039; ====&lt;br /&gt;
&lt;br /&gt;
[[Image:aquavcl_organisation_complete_02.jpg]]&lt;br /&gt;
&lt;br /&gt;
==== &amp;#039;&amp;#039;&amp;#039;Directories in vcl. Short description&amp;#039;&amp;#039;&amp;#039; ====&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; aqua &amp;#039;&amp;#039;&amp;#039;: The name Aqua means Apple look and feel, and is well known as [http://developer.apple.com/documentation/UserExperience/Conceptual/OSXHIGuidelines/XHIGIntro/chapter_1_section_1.html Aqua Human Interface Guidelines]. This look and feel means Mac OS X. The work was begun by (probably) P. luby, Dan Williams Herbert Duerr (most of fonts stuff) and Ed Peterlin. Currently in ruin, this directory does contain a lot of ideas to investigate. The most important part of needed changes for native version (3.0) will be done inside aqua dir inc: does contain all vcl relative includes [PART1]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; prj &amp;#039;&amp;#039;&amp;#039;: Does contain build.lst and d.lst build.lst give us dependencies: probably a lot for vcl, build 98th module over ~148. Everything graphical depends in vcl. &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; qa &amp;#039;&amp;#039;&amp;#039; does contain all quality assurancy stuff&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;source&amp;#039;&amp;#039;&amp;#039;: the most important:-) This directory contains common sources for all architectures and OS. Mainly: Windows, Unix: Linux , Mac OS X (X11), Solaris, including generic, kde and gtk plugins, and Aqua (Mac OS X without X11, work currently in progress). &lt;br /&gt;
&lt;br /&gt;
Depending on the OS and the architecture, binaries are built or not.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; test &amp;#039;&amp;#039;&amp;#039;: This directory does contain all the needed stuff for tests. As example, in qa/testdocuments, you&amp;#039;ll find three documents (one writer, one calc and one impress) for tests purpose. &lt;br /&gt;
Other available tests are about memcheck and persistent window state. &lt;br /&gt;
 &lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; unx &amp;#039;&amp;#039;&amp;#039;: this directory does contain all unixes stuff. We have to understand what is inside to implement aqua port. For example, a lot of classes/strutures and objects use Xlib calls we have to replace with Carbon/Cocoa call (at least at first time) for Mac OS X native port.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; win &amp;#039;&amp;#039;&amp;#039;: Doing Mac OS X native port, I first believed this directory was not interesting for us, but I was wrong: OpenOffice.org roots are inside this directory, and a lot of comments and resources are inside. Mainly interesting if Carbon is used.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;workben&amp;#039;&amp;#039;&amp;#039;: Does contain a toy called &amp;quot;svdem&amp;quot;. svdem is a binary, used for new implementations. For example, actual aqua development uses svdem intensively, to verify all important properties we need: &lt;br /&gt;
&lt;br /&gt;
- display a window first (al least ...:)) &lt;br /&gt;
&lt;br /&gt;
- close cleanly this window&lt;br /&gt;
&lt;br /&gt;
- display a point&lt;br /&gt;
&lt;br /&gt;
- trace a line&lt;br /&gt;
&lt;br /&gt;
- trace an area &lt;br /&gt;
&lt;br /&gt;
- superpose two areas doing some important graphical operations, (like xor),&lt;br /&gt;
&lt;br /&gt;
- display a character&lt;br /&gt;
&lt;br /&gt;
- display a menu. &lt;br /&gt;
&lt;br /&gt;
- intercept events correctly.&lt;br /&gt;
&lt;br /&gt;
[FIXME] add more tests&lt;br /&gt;
&lt;br /&gt;
[[User:Ericb|Ericb]] 13:21, 3 June 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Naming convention&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
* Class names start with upper case letters, to improve readability.&lt;br /&gt;
&lt;br /&gt;
* Implemented Class names are derived from the virtual classes but can of course take arbitrary names.&lt;br /&gt;
To increase readability, it&amp;#039;s recommended to closely follow the base class name.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Impl prefix: means Implementation details&amp;#039;&amp;#039;&amp;#039;. The concerned class or method or function is not used outside of this module, so no external code (or other libraries) can see it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[ Events types using Carbon API (Mac OS X): ]]&amp;#039;&amp;#039;&amp;#039; A lot of events have to be managed in runtime. Here is a short description&lt;br /&gt;
&lt;br /&gt;
- do not freeze because bad event loops&lt;br /&gt;
&lt;br /&gt;
- event types implementation: currently, they are defined in vcl/aqua/inc/aquavclevents.hxx&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Apart: exact sense of hedabu? -&amp;gt; [FIXME] as far as I understood it: it is like &amp;quot;copy&amp;quot; to deliver software into the solver, with extra magic. The header files for example are manipulated so paths need not be exact. &amp;quot;headabu&amp;quot; is supposed to disappear little by little.&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;What do we have to build in vcl?&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
Two libraries, corresponding ressources (localized) and a toy so called « svdem »&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Common part&amp;#039;&amp;#039;&amp;#039;: &lt;br /&gt;
&lt;br /&gt;
in grey on right. The result will be a non architecture dependant library, built in all cases: for instance, libvcl680mxi.dylib on Mac Intel.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Specific part  &amp;quot; a plugin &amp;quot; &amp;#039;&amp;#039;&amp;#039;: &lt;br /&gt;
&lt;br /&gt;
Light yellow: aqua part will only concern Mac OS X (non X11) the name will probably be libvcl_aqua680mxi.dylib &lt;br /&gt;
&lt;br /&gt;
As you can see, win means windows part, in blue&lt;br /&gt;
&lt;br /&gt;
For Unix build (Linux, Solaris or current Mac OS X X11), in purple.&lt;br /&gt;
&lt;br /&gt;
Result will be:&lt;br /&gt;
&lt;br /&gt;
libvclplug_PLUGIN680mxi.DLLSUFFIX , where PLUGIN can be iether gen (generic) or gtk (using gtk+) or kde (using qt), and DLLSUFFIX can be either .so (linux) or .dylib (Mac OS X) ...etc (I&amp;#039;m not sure for other cases).&lt;br /&gt;
&lt;br /&gt;
Example: libvcl680mxi.dylib and libvclplug_aqua680mxi.dylib&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;In runtime&amp;#039;&amp;#039;&amp;#039;, libvclplug_aqua will be linked to libvcl680. the first one will contain the real implementation (respecting the API, e.g. Carbon) while the generic libvcl will only contain pure virtual methods ...etc like &amp;quot;empty boxes&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Current Aqua content ===&lt;br /&gt;
&lt;br /&gt;
A more complete description of aqua (Mac OS X / no X11 specific): [[Image:Vcl_aqua_organisation_02_tree.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==EXISTING objects to build in aqua==&lt;br /&gt;
&lt;br /&gt;
===Sal APP &amp;quot;everything application&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
[FIXME] add all objects descriptions&lt;br /&gt;
&lt;br /&gt;
==== saldata ====&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Defined in plugin exclusively&amp;#039;&amp;#039;&amp;#039; (i.e. for headers)&lt;br /&gt;
&lt;br /&gt;
Unix: unx/source/app/saldata.cxx (header in unx/inc)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Aqua: aqua/source/app/saldata.cxx (header in win/inc)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Windows: win/source/app/saldata.cxx (header in aqua/inc)&lt;br /&gt;
&lt;br /&gt;
* Role: saldata contains various kind of data used by the implementation for the concerned platform. &amp;#039;&amp;#039;&amp;#039;It is a bunch of global data collections reserved for the platform&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
It is just completely platform dependent, and nobody except this plugin can see it.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Saldata is something like a &amp;quot;second sal&amp;quot;, but providing an abstraction regarding windowing and graphics&amp;#039;&amp;#039;&amp;#039;, while SAL module provides an abstraction more Operating System oriented) &lt;br /&gt;
&lt;br /&gt;
e.g. : have a look at XRequest array in vcl/unx/source/app/saldata.cxx =&amp;gt; all calls are for Xlib (X11).  Ok, useless there, but interesting:-)&lt;br /&gt;
&lt;br /&gt;
[FIXME]: use Windows implementation could be a good starting point. Nothing is the same, but the current aquavcl cws uses similar objects, and it works very correctly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
saldatax.cxx uses classes SalInstance, SalObject, SalFrame, SalVirtualDevice, SalPrinter and fontList.&lt;br /&gt;
&lt;br /&gt;
Current list of possible objects who can be instantiated/released:&lt;br /&gt;
&lt;br /&gt;
structure SalData: does contain pointers on all kind of objects from other classes used in saldata.&lt;br /&gt;
&lt;br /&gt;
inline functions: [FIXME]: complete the description&lt;br /&gt;
&lt;br /&gt;
- SetSalData:&lt;br /&gt;
- GetSalData:&lt;br /&gt;
- GetAppSalData:&lt;br /&gt;
&lt;br /&gt;
==== salinst ====&lt;br /&gt;
&lt;br /&gt;
=&amp;gt; implemented in vcl/aqua/source/app/salinst.cxx&lt;br /&gt;
&lt;br /&gt;
Role: &lt;br /&gt;
&lt;br /&gt;
* get environment, mutexes, instantiate AquaSalInstance (Ctor, Dtor),&lt;br /&gt;
&lt;br /&gt;
* instantiates/releases a lot of other objects using Get() / CreateObject() / DestroyObject() methods.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Current list of possible objects who can be instantiated/released:&lt;br /&gt;
&lt;br /&gt;
 * VirtualDevice [FIXME]: exact role?&lt;br /&gt;
&lt;br /&gt;
 *Printer  &lt;br /&gt;
&lt;br /&gt;
- GetDefaultPrinter/ CreatePrinter() / DestroyPrinter - what a name ;-) -&lt;br /&gt;
&lt;br /&gt;
- InfoPrinter (Get/Create/Delete)&lt;br /&gt;
&lt;br /&gt;
- PrinterQueue (DeletePrinterQueueInfo / GetPrinterQueueInfo / GetPrinterQueueState)&lt;br /&gt;
&lt;br /&gt;
 * System (Create / Delete) [FIXME]: what means system here?&lt;br /&gt;
&lt;br /&gt;
 * Events: &lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::SetEventCallback()&lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::SetErrorEvenCallback()&lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::GetConnectionIdentifier()&lt;br /&gt;
&lt;br /&gt;
 * Menu / MenuItem: &lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::CreateMenu() / same for DestroyMenu()&lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::CreateMenuItem / same DestroyMenuItem()&lt;br /&gt;
&lt;br /&gt;
 * Sound: &lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::CreateSalSound()  =&amp;gt; object to a pointer of SalSound type&lt;br /&gt;
&lt;br /&gt;
Note: AquaSalInstance::DestroySalSound is not implemented (?)&lt;br /&gt;
&lt;br /&gt;
 * Timer: CreateTimer() /&lt;br /&gt;
&lt;br /&gt;
AquaSalInstance:: DestroyTimer() is not yet implemented (?)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Class MacImeStatus: inherits of SalI18NImeStatus&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; only there to see if there is a window to toggle into menubar [FIXME]??&lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::CreateI18NImeStatus(): instantiates MacImeStatus&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;For futher informations, see: &amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;[[Content of salinst.cxx]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
([[User:Ericb|Ericb]] 16:11, 20 May 2006 (CEST) )&lt;br /&gt;
&lt;br /&gt;
==== salmain ====&lt;br /&gt;
&lt;br /&gt;
Role: if possible, runs the standard vcl application code SVMain()&lt;br /&gt;
&lt;br /&gt;
([[User:Ericb|Ericb]] 16:15, 20 May 2006 (CEST))&lt;br /&gt;
&lt;br /&gt;
==== salsound ====&lt;br /&gt;
&lt;br /&gt;
==== salsys ====&lt;br /&gt;
&lt;br /&gt;
==== saltimer ====&lt;br /&gt;
&lt;br /&gt;
=== Sal GDI (everything Graphical Display Interface) ===&lt;br /&gt;
&lt;br /&gt;
====salgdinativewidgets====&lt;br /&gt;
&lt;br /&gt;
[[native controls]]&lt;br /&gt;
&lt;br /&gt;
==== salatslayout ====&lt;br /&gt;
&lt;br /&gt;
==&amp;gt; implemented in vcl/aqua/source/gdi/salatslayout.cxx&lt;br /&gt;
&lt;br /&gt;
- Handle text layouting :&lt;br /&gt;
&lt;br /&gt;
    * Use ATSUI (ATSUCreateTextLayoutFromPtr) to layout the text unicode char buffer&lt;br /&gt;
    * Use ATSUI (ATSU..) to get informations about glyphs&lt;br /&gt;
    * Populate different arrays (mpGlyph2Chars, mpChars2Glyph, mpCharsWidths, mpGlyphAdvances)&lt;br /&gt;
      that are used in various methods.&lt;br /&gt;
&lt;br /&gt;
==== salatsuiutils ====&lt;br /&gt;
&lt;br /&gt;
==== salfontutils ====&lt;br /&gt;
&lt;br /&gt;
==== salmathutils ====&lt;br /&gt;
&lt;br /&gt;
==== sal bmp ====&lt;br /&gt;
&lt;br /&gt;
==== salvd ====&lt;br /&gt;
&lt;br /&gt;
==== salpixmaputils====&lt;br /&gt;
&lt;br /&gt;
==== salprn ====&lt;br /&gt;
&lt;br /&gt;
====salrectangle====&lt;br /&gt;
&lt;br /&gt;
==== salvd ====&lt;br /&gt;
&lt;br /&gt;
=== Sal Window===&lt;br /&gt;
&lt;br /&gt;
==== salframe ====&lt;br /&gt;
Documentation in progress, from damiend :&lt;br /&gt;
[[User:Damiend|Damiend page]]&lt;br /&gt;
&lt;br /&gt;
====salobj====&lt;br /&gt;
&lt;br /&gt;
== TO BE IMPLEMENTED (missing in Aqua)==&lt;br /&gt;
&lt;br /&gt;
===Audio===&lt;br /&gt;
&lt;br /&gt;
====audioconvert====&lt;br /&gt;
 (obsolete?) &lt;br /&gt;
&lt;br /&gt;
====devaudio====&lt;br /&gt;
(obsolete?)&lt;br /&gt;
&lt;br /&gt;
====native sound====&lt;br /&gt;
&lt;br /&gt;
====salimpsound====&lt;br /&gt;
&lt;br /&gt;
====vsound====&lt;br /&gt;
&lt;br /&gt;
===i18n===&lt;br /&gt;
&lt;br /&gt;
===keysymnames===&lt;br /&gt;
&lt;br /&gt;
===saldisp===&lt;br /&gt;
&lt;br /&gt;
===sm===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[FIXME]: is session manager usefull?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Native Controls&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
====Scrollbar====&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Works as expected&amp;#039;&amp;#039;&amp;#039;. The most important work is done&lt;br /&gt;
&lt;br /&gt;
See : [[Mac_OS_X_Porting_-_Native_Controls#ScrollBar]]&lt;br /&gt;
&lt;br /&gt;
====DrawThemeButton() documentation====&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Started&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
See : [[Mac_OS_X_Porting_-_Native_Controls#ComboBox]]&lt;br /&gt;
&lt;br /&gt;
Started&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DrawThemeButton&lt;br /&gt;
Draws a button.&lt;br /&gt;
&lt;br /&gt;
OSStatus DrawThemeButton (&lt;br /&gt;
   const Rect * inBounds,&lt;br /&gt;
   ThemeButtonKind inKind,&lt;br /&gt;
   const ThemeButtonDrawInfo * inNewInfo,&lt;br /&gt;
   const ThemeButtonDrawInfo * inPrevInfo,&lt;br /&gt;
   ThemeEraseUPP inEraseProc,&lt;br /&gt;
   ThemeButtonDrawUPP inLabelProc,&lt;br /&gt;
   UInt32 inUserData&lt;br /&gt;
);&lt;br /&gt;
Parameters&lt;br /&gt;
inBounds&lt;br /&gt;
A pointer to a structure of type Rect. Pass a rectangle specifying the boundary of the button, in local coordinates.&lt;br /&gt;
&lt;br /&gt;
inKind&lt;br /&gt;
A value of type ThemeButtonKind. Pass a constant specifying the type of button to draw. &lt;br /&gt;
See “Theme Buttons” for descriptions of possible values.&lt;br /&gt;
&lt;br /&gt;
inNewInfo&lt;br /&gt;
A pointer to a structure of type ThemeButtonDrawInfo. Before calling DrawThemeButton, &lt;br /&gt;
set the structure to contain the new state, value, and adornment for the button. &lt;br /&gt;
DrawThemeButton uses the information passed in the inNewInfo and inPrevInfo parameters&lt;br /&gt;
to apply transitional animation or sound effects as the button state changes, if such are &lt;br /&gt;
specified under the current theme.&lt;br /&gt;
&lt;br /&gt;
inPrevInfo&lt;br /&gt;
A pointer to a structure of type ThemeButtonDrawInfo. If the button state is changing,&lt;br /&gt;
set the structure to contain the previous state, value, and adornment for the button, &lt;br /&gt;
to allow DrawThemeButton to apply any transitional effects. If the button state is not &lt;br /&gt;
changing, you can pass NULL.&lt;br /&gt;
&lt;br /&gt;
inEraseProc&lt;br /&gt;
A value of type ThemeEraseUPP. If you have a custom background, use this parameter to pass&lt;br /&gt;
a universal function pointer to an application-defined function such as that described in &lt;br /&gt;
ThemeEraseProcPtr. DrawThemeButton calls this function to erase the background before drawing&lt;br /&gt;
 the button. If you pass NULL, DrawThemeButton&amp;#039;s default behavior is to erase the background&lt;br /&gt;
 for you.&lt;br /&gt;
&lt;br /&gt;
inLabelProc&lt;br /&gt;
A value of type ThemeButtonDrawUPP. If you pass a universal function pointer to an &lt;br /&gt;
application-defined function such as that described in ThemeButtonDrawProcPtr, DrawThemeButton&lt;br /&gt;
 calls that function to draw the label of the button. If you pass NULL, no label is drawn.&lt;br /&gt;
&lt;br /&gt;
inUserData&lt;br /&gt;
An unsigned 32-bit integer. Provide any data to be passed in to the callback functions specified in &lt;br /&gt;
the inLabelProc and inEraseProc parameters. Pass NULL if you do not wish to provide any data.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
A result code. See “Appearance Manager Result Codes”.&lt;br /&gt;
&lt;br /&gt;
Discussion&lt;br /&gt;
The DrawThemeButton function draws a theme-compliant button. If a ThemeEraseProcPtr is &lt;br /&gt;
specified in the inEraseProc parameter, DrawThemeButton uses that function to erase the &lt;br /&gt;
background of the button before drawing the button. After the button is drawn, if a&lt;br /&gt;
ThemeButtonDrawProcPtr is specified in the inLabelProc parameter, DrawThemeButton calls&lt;br /&gt;
that function to draw the button’s label.&lt;br /&gt;
&lt;br /&gt;
Note that DrawThemeButton also draws any appearance adornments for the button and that these&lt;br /&gt;
can extend beyond the button’s basic bounding rectangle, as specified in the inBounds parameter,&lt;br /&gt;
and may be of variable shape. You may therefore wish to call the function&lt;br /&gt;
GetThemeButtonBackgroundBounds to obtain the actual rectangle containing the pixels belonging&lt;br /&gt;
to a button under the current theme.&lt;br /&gt;
&lt;br /&gt;
Version Notes&lt;br /&gt;
This function is available with Appearance Manager 1.1 and later.&lt;br /&gt;
&lt;br /&gt;
Availability&lt;br /&gt;
Available in CarbonLib 1.0 and later when Appearance 1.1 or later is present.&lt;br /&gt;
Available in Mac OS X 10.0 and later.&lt;br /&gt;
Declared In&lt;br /&gt;
Appearance.h&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====HIComboBoxCreate() documentation====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HIComboBoxCreate&lt;br /&gt;
Creates a combo box control.&lt;br /&gt;
&lt;br /&gt;
OSStatus HIComboBoxCreate (&lt;br /&gt;
   const HIRect* boundsRect,&lt;br /&gt;
   CFStringRef text,&lt;br /&gt;
   const ControlFontStyleRec* style,&lt;br /&gt;
   CFArrayRef list,&lt;br /&gt;
   OptionBits inAttributes,&lt;br /&gt;
   HIViewRef* outComboBox&lt;br /&gt;
);&lt;br /&gt;
Parameters&lt;br /&gt;
boundsRect&lt;br /&gt;
The bounding box of the control.&lt;br /&gt;
&lt;br /&gt;
text&lt;br /&gt;
The default text in the editable portion of the control. Can be NULL.&lt;br /&gt;
&lt;br /&gt;
style&lt;br /&gt;
The font style of the both editable text and the text in the disclosure list. Can be NULL.&lt;br /&gt;
&lt;br /&gt;
list&lt;br /&gt;
The default values available in the disclosure list. Can be NULL.&lt;br /&gt;
&lt;br /&gt;
inAttributes&lt;br /&gt;
The default attributes of the combo box. For possible values, see “Combo Box Attributes”.&lt;br /&gt;
&lt;br /&gt;
outComboBox&lt;br /&gt;
On exit, a pointer to a reference for the new control.&lt;br /&gt;
&lt;br /&gt;
Discussion&lt;br /&gt;
The combo box can be used in compositing mode, as well as traditional Control Manager mode.&lt;br /&gt;
When created, this view is invisible. To see the view, you must show the view by calling HIViewSetVisible.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== What is used for Linux, Windows, Mac OS X ...build ? ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[Description of the dependencies]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[Windows]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[MacOS X]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[Linux]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[Solaris]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Content of Aqua ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[Click here to see the complete list]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Content of vcl/inc&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Notes: &lt;br /&gt;
&lt;br /&gt;
1) Where to find includes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;foo/bar.hxx&amp;gt; means you can find bar.hxx in the foo module. The new style file is foo/inc/foo/bar.hxx, old style is foo/inc/bar.hxx and sometimes the file is somewhere else in the tree or generated. The deliver process copies/generates the file into solver at solver/680/build_type/inc/foo. Good for fixing broken builds. ;-)&lt;br /&gt;
&lt;br /&gt;
2) &lt;br /&gt;
suffix .h (for C calls or first version?) or .hxx (C++) &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;A) Family of includes&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
Looking more closely at the list brings to the fore (expression from dictionary ;-) ) that include names are&lt;br /&gt;
informatives. Most of the time, the name gives the function/role.&lt;br /&gt;
What is interesting is the files with name begining with &amp;quot;sal&amp;quot;. sal means System Abstraction Layer + include&amp;#039;s function (or explicit name). &lt;br /&gt;
&lt;br /&gt;
Partial list, for example:&lt;br /&gt;
&lt;br /&gt;
salatype.hxx&lt;br /&gt;
&lt;br /&gt;
salbmp.hxx&lt;br /&gt;
&lt;br /&gt;
salctrlhandle.hxx&lt;br /&gt;
&lt;br /&gt;
salctype.hxx&lt;br /&gt;
&lt;br /&gt;
salframe.hxx&lt;br /&gt;
&lt;br /&gt;
salgdi.hxx&lt;br /&gt;
&lt;br /&gt;
salgeom.hxx&lt;br /&gt;
&lt;br /&gt;
sallayout.hxx (main header for fonts services)&lt;br /&gt;
...&lt;br /&gt;
salmenu&lt;br /&gt;
salnativewidgets&lt;br /&gt;
...etc&lt;br /&gt;
&lt;br /&gt;
Other important families are &amp;quot;sv&amp;quot; and &amp;quot;uno&amp;quot; or &amp;quot;win&amp;quot; (window) prefixed. sal family will be analysed apart.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;B) Includes of includes&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Some includes are more important than other. To prove this, just have a look is sufficient: some are always needed, and some more rarely.&lt;br /&gt;
&lt;br /&gt;
To verify, a simple test to do in vcl/inc:&lt;br /&gt;
&lt;br /&gt;
egrep -H &amp;quot;#include&amp;quot; ./* | wc -l  gives me 681 lines ! And some of them are the same...&lt;br /&gt;
&lt;br /&gt;
To know more, the precedent command line can be modified to make appear the numerous call &lt;br /&gt;
to the same includes files.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
egrep -H &amp;quot;#include&amp;quot; ./* | cut -d&amp;quot;#&amp;quot; -f2 | sort &amp;gt; liste.txt&lt;br /&gt;
&lt;br /&gt;
The content of liste.txt is explicit: dllapi.h, sv.h and some other are very important, while some other includes are only one or two times used. We can see too that vos includes are numerous, even if vos is deprecated**&lt;br /&gt;
&lt;br /&gt;
 **see http://wiki.services.openoffice.org/wiki/Source_code_directories&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I&amp;#039;m nearly sure that a complete analysis of just this result will give us a lot of information.&lt;br /&gt;
&lt;br /&gt;
I propose to change the order of analysis starting with dllapi.h and sv.h.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[to be continued]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;B1) &amp;quot;sal&amp;quot; includes family&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
[[salinst.hxx]] This seems to be the main include file&lt;br /&gt;
&lt;br /&gt;
[[salatype.hxx]]&lt;br /&gt;
&lt;br /&gt;
[[salctrlhandle.hxx]]&lt;br /&gt;
&lt;br /&gt;
[[salctype.hxx]]&lt;br /&gt;
&lt;br /&gt;
[[salframe.hxx]]&lt;br /&gt;
&lt;br /&gt;
[[salgdi.hxx]]&lt;br /&gt;
&lt;br /&gt;
[[salgeom.hxx]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[ sallayout.hxx ]]&amp;#039;&amp;#039;&amp;#039; &amp;lt;-- see Native Fonts implementation&lt;br /&gt;
&lt;br /&gt;
[[salgtype.hxx]]&lt;br /&gt;
&lt;br /&gt;
[[vcl/inc/salobj.hxx]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;B2) Classicals includes&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
file: abstdlg.hxx [ means abstract dialog ]&lt;br /&gt;
&lt;br /&gt;
This includes does contain the following classes definitions:&lt;br /&gt;
&lt;br /&gt;
[FIXME] : choose a precise presentation template for classes &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
VclAbstractDialog,&lt;br /&gt;
&lt;br /&gt;
VclAbstractTerminateDialog, &lt;br /&gt;
&lt;br /&gt;
VclAbstractRefreshableDialog,&lt;br /&gt;
 &lt;br /&gt;
VclAbstractDialogFactory, &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
uses &amp;lt;tools/solar.h&amp;gt; , &amp;lt;tools/string.hxx&amp;gt; + &lt;br /&gt;
&lt;br /&gt;
&amp;quot;dllapi.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Note : dllapi.h is very interesting because when we have to find (for example) a library suffix, SAL_DLLEXTENSSION can replace all suffixes (every OS&amp;#039;s and archs). Just including sal/config.h does it ! &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Classes:&lt;br /&gt;
&lt;br /&gt;
Window -&amp;gt; what? [FIXME]&lt;br /&gt;
ResId -&amp;gt; what?&lt;br /&gt;
&lt;br /&gt;
Does contain the prototype of VclAbstractDialog, inherit of VCL_DLLPUBLIC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
file: dllapi.h [ dll for dynamic linked library ]&lt;br /&gt;
Uses: &amp;lt;sal/config.h&amp;gt; and &amp;gt;sal/types/h&amp;gt;&lt;br /&gt;
includes: VCL_DLLPUBLIC macro&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
file: accel.h [ means accelerator ]&lt;br /&gt;
&lt;br /&gt;
Classes:&lt;br /&gt;
&lt;br /&gt;
Accelerator &lt;br /&gt;
{&lt;br /&gt;
}&lt;br /&gt;
ImplAccelEntry &lt;br /&gt;
{&lt;br /&gt;
public members: &lt;br /&gt;
&lt;br /&gt;
Names&lt;br /&gt;
&lt;br /&gt;
mnId&lt;br /&gt;
maKeyCode&lt;br /&gt;
mpAccel&lt;br /&gt;
mpAutoAccel&lt;br /&gt;
mbEnabled&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function / returns / parameters&lt;br /&gt;
&lt;br /&gt;
ImplGetKeyCode / void / KeyFuncType eFunc, ref rCode1 , ref rCode2, ref rCode3&lt;br /&gt;
&lt;br /&gt;
file: accel.hxx &lt;br /&gt;
&lt;br /&gt;
Uses: &amp;lt;sv.h&amp;gt; , &amp;quot;dllapi.h&amp;quot; ,&amp;lt;tools/resid.hxx&amp;gt;, &amp;lt;&amp;lt;tools/rc.hxx&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Classes:&lt;br /&gt;
&lt;br /&gt;
ImplAccelData;&lt;br /&gt;
ImplAccelEntry;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Important Links ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[Progressive implementation]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Native Font server Implementation&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;[[Mac OS X Porting - Native Fonts]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Native Sound Implementation&amp;#039;&amp;#039;&amp;#039;: [[Mac OS X Porting - Native Audio and Video]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Native Printing Implementation&amp;#039;&amp;#039;&amp;#039;: [[Mac OS X Porting - Native_Printing]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Drag and Drop implementation&amp;#039;&amp;#039;&amp;#039;: [[Mac OS X Porting - Native Drag and drop]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Data Acquisition&amp;#039;&amp;#039;&amp;#039; : [[Mac OS X Porting - Data Acquisition]]&lt;br /&gt;
&lt;br /&gt;
This work is part of http://wiki.services.openoffice.org/wiki/Mac_OS_X_Porting_-_Work_Areas/Todo%27s&lt;br /&gt;
&lt;br /&gt;
[to be continued:-) ]&lt;br /&gt;
&lt;br /&gt;
== Keyboard comparizon between OpenOffice.org / Mac OS X  application ==&lt;br /&gt;
&lt;br /&gt;
[FIXME] redo a cleanest array &lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;vertical-align:top; text-align:centered; background-color:#F0F0F0;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#99CCFF; font-weight:bold;&amp;quot; &lt;br /&gt;
| Modifier||+ key  || Result || TextEdit  returns&lt;br /&gt;
|-&lt;br /&gt;
|ALT|| a||æ ||æ &lt;br /&gt;
|-&lt;br /&gt;
|ALT||b||ß ||ß&lt;br /&gt;
|-&lt;br /&gt;
|ALT||c||© ||©&lt;br /&gt;
|-&lt;br /&gt;
|ALT||d||∂ ||∂&lt;br /&gt;
|-&lt;br /&gt;
|ALT||e||ê ||ê&lt;br /&gt;
|-&lt;br /&gt;
|ALT||f||ƒ ||ƒ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||g ||ﬁ ||ﬁ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||h ||Ì ||Ì&lt;br /&gt;
|-&lt;br /&gt;
|ALT||i ||î ||î&lt;br /&gt;
|-&lt;br /&gt;
|ALT||j ||Ï ||Ï&lt;br /&gt;
|-&lt;br /&gt;
|ALT||k ||È ||È&lt;br /&gt;
|-&lt;br /&gt;
|ALT||l ||¬ ||¬&lt;br /&gt;
|-&lt;br /&gt;
|ALT||m ||µ ||µ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||n ||~ ||~&lt;br /&gt;
|-&lt;br /&gt;
|ALT||o ||œ ||œ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||p ||π ||π&lt;br /&gt;
|-&lt;br /&gt;
|ALT||q ||‡ ||‡&lt;br /&gt;
|-&lt;br /&gt;
|ALT||r ||® ||®&lt;br /&gt;
|-&lt;br /&gt;
|ALT||s ||Ò ||Ò&lt;br /&gt;
|-&lt;br /&gt;
|ALT||t ||† ||†&lt;br /&gt;
|-&lt;br /&gt;
|ALT||u ||º ||º&lt;br /&gt;
|-&lt;br /&gt;
|ALT||v ||◊ ||◊&lt;br /&gt;
|-&lt;br /&gt;
|ALT||w ||‹ ||‹&lt;br /&gt;
|-&lt;br /&gt;
|ALT||x ||≈ ||≈&lt;br /&gt;
|-&lt;br /&gt;
|ALT||y ||Ú ||Ú&lt;br /&gt;
|-&lt;br /&gt;
|ALT||z ||Â ||Â&lt;br /&gt;
|-&lt;br /&gt;
|ALT||A ||Æ ||Æ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||B ||∫ ||∫&lt;br /&gt;
|-&lt;br /&gt;
|ALT||C ||¢ ||¢&lt;br /&gt;
|-&lt;br /&gt;
|ALT||D||∆||∆&lt;br /&gt;
|-&lt;br /&gt;
|ALT||F ||· ||·&lt;br /&gt;
|-&lt;br /&gt;
|ALT||G ||ﬂ ||ﬂ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||H ||Î ||Î&lt;br /&gt;
|-&lt;br /&gt;
|ALT||I ||Î ||Î&lt;br /&gt;
|-&lt;br /&gt;
|ALT||J ||Í ||Í&lt;br /&gt;
|-&lt;br /&gt;
|ALT||K ||Ë ||Ë&lt;br /&gt;
|-&lt;br /&gt;
|ALT||L || &amp;lt;pre&amp;gt;|&amp;lt;/pre&amp;gt; ||&amp;lt;pre&amp;gt;|&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|ALT||M ||Ó ||Ó&lt;br /&gt;
|-&lt;br /&gt;
|ALT||N ||ı ||ı&lt;br /&gt;
|-&lt;br /&gt;
|ALT||O ||Œ ||Œ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||P ||∏ ||∏&lt;br /&gt;
|-&lt;br /&gt;
|ALT||Q ||Ω ||Ω&lt;br /&gt;
|-&lt;br /&gt;
|ALT||R ||‚ ||‚&lt;br /&gt;
|-&lt;br /&gt;
|ALT||S ||∑ ||∑&lt;br /&gt;
|-&lt;br /&gt;
|ALT||T ||™ ||™&lt;br /&gt;
|-&lt;br /&gt;
|ALT||U ||ª ||ª&lt;br /&gt;
|-&lt;br /&gt;
|ALT||V ||√ ||√&lt;br /&gt;
|-&lt;br /&gt;
|ALT||W ||› ||›&lt;br /&gt;
|-&lt;br /&gt;
|ALT||X ||⁄ ||⁄&lt;br /&gt;
|-&lt;br /&gt;
|ALT||Y ||Ÿ ||Ÿ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||Z ||Å ||Å&lt;br /&gt;
|-&lt;br /&gt;
|ALT||$ ||€ ||€&lt;br /&gt;
|-&lt;br /&gt;
|ALT||` ||@ ||@&lt;br /&gt;
|-&lt;br /&gt;
|ALT||£ ||# ||#&lt;br /&gt;
|-&lt;br /&gt;
|ALT||* ||¥ ||¥&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Sous réserve d&amp;#039;erreur ou omission [[User:Ericb|Ericb]] 00:05, 14 January 2007 (CET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[User:Ericb|Ericb]] 15:00, 22 Jul 2005 (EDT)&lt;br /&gt;
&lt;br /&gt;
[[Category:Porting]]&lt;br /&gt;
[[Category:MacOSX]]&lt;br /&gt;
[[Category:Aqua]]&lt;/div&gt;</summary>
		<author><name>Plipli</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Mac_OS_X_Implementing_HIView&amp;diff=27993</id>
		<title>Mac OS X Implementing HIView</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Mac_OS_X_Implementing_HIView&amp;diff=27993"/>
		<updated>2007-03-15T04:51:51Z</updated>

		<summary type="html">&lt;p&gt;Plipli: /* HIView use in AquaSalFrame::CreateNewSystemWindow() */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Contributors ==&lt;br /&gt;
&lt;br /&gt;
Eric Bachard[[http://wiki.services.openoffice.org/wiki/User:Ericb ericb]]&lt;br /&gt;
&lt;br /&gt;
Sébastien Plisson [[http://wiki.services.openoffice.org/wiki/User:Plipli plipli]]&lt;br /&gt;
&lt;br /&gt;
== Introduction == &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[DRAFT]  : means,  not yet working, work in progress ... &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
HIObject is a common base class for all user interface objects and all menus, windows, controls, toolbars, and so on, are subclasses of HIObject.&lt;br /&gt;
&lt;br /&gt;
HIView is an object-oriented view system subclassed from HIObject. All controls are implemented as HIView objects (&amp;quot;views&amp;quot;). You can easily subclass HIView classes, making it easy to implement custom controls. Over time the HIView API will replace the current Control Manager. See [[http://developer.apple.com/documentation/Carbon/Conceptual/HandlingWindowsControls/hitb-wind_cont_tasks/chapter_3_section_9.html HIView intro]]&lt;br /&gt;
&lt;br /&gt;
The main idea behind HIView is to superpose plans, to create any view, using compositing possibilities of Quartz Graphical Engine. &lt;br /&gt;
&lt;br /&gt;
The final result is the superposition of all plans, following simple rules like :&lt;br /&gt;
&lt;br /&gt;
 - The last plan is always drawn on the previous one ;&lt;br /&gt;
 - Some plans can  be declared visible, or not, very easely.&lt;br /&gt;
&lt;br /&gt;
This page is part of [[http://wiki.services.openoffice.org/wiki/Mac_OS_X_Porting_-_Native_Controls Native Controls Implementation]] and the objective is to use HIView for HIComboboxes or other HI*  controls. &lt;br /&gt;
&lt;br /&gt;
Our objective is to bind vcl controls with HI* controls, from Carbon API. &lt;br /&gt;
&lt;br /&gt;
e.g.  :  implement HICombobox as one control only.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The generic implementation, under tests (and not fully working), uses : &lt;br /&gt;
&lt;br /&gt;
HI* events definitions in aquavclevents.hxx &lt;br /&gt;
&lt;br /&gt;
Event handler implementation in HandleHIViewEvent()&lt;br /&gt;
&lt;br /&gt;
The use of HandleHIViewEvent() in AquaSalFrame::CreateNewSystemWindow()&lt;br /&gt;
&lt;br /&gt;
The use of HI* controls, in vcl, when ::CreateNewSystemWindow() is used, calling HandleHIViewEvent(), when HI* events are detected in the frame.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note : we &amp;quot;or&amp;quot;- ed kWindowCompositingAttribute in nWindowAttributes, to see compositing effects. &lt;br /&gt;
[FIXME] : investigate, because use this attribute causes refresh issues&lt;br /&gt;
&lt;br /&gt;
== VCL / AQUA traces deductions (plipli) ==&lt;br /&gt;
1)&lt;br /&gt;
&lt;br /&gt;
== VCL / AQUA traces deductions (ericb) ==&lt;br /&gt;
1)&lt;br /&gt;
&lt;br /&gt;
== Technical principles ==&lt;br /&gt;
&lt;br /&gt;
1) OO ask to VCL / native implementation code to draw controls (ie DrawNativeControl) or images or text&lt;br /&gt;
&lt;br /&gt;
2) For controls, native implementation code create objects but do not draw them&lt;br /&gt;
For images and text, native code draw objects to context (from QDBegin) or context from HiView event&lt;br /&gt;
&lt;br /&gt;
3) When HIView events are received by event handler, especially kEventControlDraw, native code should draw controls to context given by the event&lt;br /&gt;
&lt;br /&gt;
4) Native code call needsDisplay functions to tell Quartz which zone to update&lt;br /&gt;
&lt;br /&gt;
== Current code implementation==&lt;br /&gt;
&lt;br /&gt;
===Events for HIView ===&lt;br /&gt;
&lt;br /&gt;
Two sorts of events are needed: &lt;br /&gt;
&lt;br /&gt;
*for objects (ClasskEventClassHIObject )  :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;kEventHIObjectConstruct&lt;br /&gt;
&lt;br /&gt;
kEventHIObjectInitialize&lt;br /&gt;
&lt;br /&gt;
kEventHIObjectDestruct&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*for controls themselves ( Class kEventClassControl ) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;kEventControlDraw &lt;br /&gt;
&lt;br /&gt;
kEventControlInitialize&lt;br /&gt;
&lt;br /&gt;
kEventControlHitTest&lt;br /&gt;
&lt;br /&gt;
kEventControlGetPartRegion&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Current implementation : see vcl/aqua/aquavclevents.hxx for more informations about the syntax.&lt;br /&gt;
&lt;br /&gt;
===Install Event Handler ===&lt;br /&gt;
&lt;br /&gt;
Now we have to install event Handler, inside AquaSalFrame::CreateNewSystemWindow() :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
InstallEventHandler (&lt;br /&gt;
                           GetControlEventTarget (mhView),&lt;br /&gt;
                           NewEventHandlerUPP (HandleHIViewEvent),&lt;br /&gt;
                           GetEventTypeCount (cHIViewEvent),&lt;br /&gt;
                           cHIViewEvent,&lt;br /&gt;
                           (void*)mhView, // note the use of the pointer &lt;br /&gt;
                           NULL&lt;br /&gt;
                           );&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== The HI* Event Handler ===&lt;br /&gt;
&lt;br /&gt;
The Handler is OSStatus type, and is used when events are detected.&lt;br /&gt;
&lt;br /&gt;
e.g.  : we created HandleHIViewEvent() &lt;br /&gt;
&lt;br /&gt;
using GetEventParameter, itself using the parameters described in Apple documentation. &lt;br /&gt;
&lt;br /&gt;
Code sample :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
OSStatus HandleHIViewEvent(EventHandlerCallRef inHandlerCallRef, EventRef inEvent, void* inUserData)&lt;br /&gt;
{ &lt;br /&gt;
    //lock&lt;br /&gt;
    ImplSalYieldMutexAcquire();&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    OSStatus status = noErr;&lt;br /&gt;
    &lt;br /&gt;
    // we use mrContext, global and seen from everywhere &lt;br /&gt;
    CGContextRef mrContext; &lt;br /&gt;
    &lt;br /&gt;
    // create HIRect, contianing the control bounds ( in local coordinates) &lt;br /&gt;
    HIRect bounds;  &lt;br /&gt;
&lt;br /&gt;
    status = GetEventParameter (inEvent, &lt;br /&gt;
                                kEventParamCGContextRef, &lt;br /&gt;
                                typeCGContextRef, &lt;br /&gt;
                                NULL, &lt;br /&gt;
                                sizeof (CGContextRef), &lt;br /&gt;
                                NULL, &lt;br /&gt;
                                &amp;amp;mrContext); &lt;br /&gt;
&lt;br /&gt;
    // not used, but usefull&lt;br /&gt;
    //require_noerr(status, CantGetGraphicsContext); // 2&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
    // We need to know the bounds containing the current control &lt;br /&gt;
    HIViewGetBounds ((HIViewRef) inUserData, &amp;amp;bounds); &lt;br /&gt;
&lt;br /&gt;
    // not used, but usefull&lt;br /&gt;
    //require_noerr(status, CantGetBoundingRectangle);&lt;br /&gt;
&lt;br /&gt;
    // unlock &lt;br /&gt;
    ImplSalYieldMutexRelease();&lt;br /&gt;
    &lt;br /&gt;
    return status;  &lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===HIView use in AquaSalFrame::CreateNewSystemWindow()  ===&lt;br /&gt;
&lt;br /&gt;
Code sample : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    //  TEST HIVIew part &lt;br /&gt;
    // Set mrContentView with HIView Content ViewRef&lt;br /&gt;
  &lt;br /&gt;
        HIRect myViewRect;&lt;br /&gt;
        myViewRect.origin.x = aContentRect.left; &lt;br /&gt;
        myViewRect.origin.y = aContentRect.right; &lt;br /&gt;
        myViewRect.size.width = aContentRect.right-aContentRect.left; &lt;br /&gt;
        myViewRect.size.height = aContentRect.bottom-aContentRect.top; &lt;br /&gt;
        OSStatus errval;&lt;br /&gt;
        errval = HIViewFindByID(HIViewGetRoot(mrWindow), kHIViewWindowContentID, &amp;amp;mrContentView); &lt;br /&gt;
&lt;br /&gt;
        // make the view visible                        &lt;br /&gt;
        HIViewSetVisible (mrContentView, true); &lt;br /&gt;
        &lt;br /&gt;
        // set the frame&lt;br /&gt;
        HIViewSetFrame (mrContentView, &amp;amp;myViewRect);&lt;br /&gt;
&lt;br /&gt;
        // Activate content view and children&lt;br /&gt;
        HIViewSetActivated (mrContentView,true);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Controls ===&lt;br /&gt;
&lt;br /&gt;
[FIXME]&lt;br /&gt;
&lt;br /&gt;
Example : HICombobox&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; code located in vcl/aqua/source/gdi/salnativewidgets.cxx  , where all NWF are defined &lt;br /&gt;
&lt;br /&gt;
1) declare CTRL_COMBOBOX control as &amp;quot;true&amp;quot; in isNativeControlSupported() &lt;br /&gt;
&lt;br /&gt;
2) get the control region in getNativeControlRegion() &lt;br /&gt;
&lt;br /&gt;
3) add CTRL_COMBOBOX case in drawNativeControl()&lt;br /&gt;
&lt;br /&gt;
Code sample for the last part (Warning : not yet working !! ) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 switch( nType )&lt;br /&gt;
    {&lt;br /&gt;
            &lt;br /&gt;
        case CTRL_COMBOBOX:&lt;br /&gt;
        if ( ( nPart==PART_BUTTON_DOWN) ||  (nPart==PART_SUB_EDIT) || (nPart==PART_ENTIRE_CONTROL) || (nPart==HAS_BACKGROUND_TEXTURE))&lt;br /&gt;
&lt;br /&gt;
        .... (other code ) &lt;br /&gt;
&lt;br /&gt;
                    HIViewRef myCombo;&lt;br /&gt;
                                        &lt;br /&gt;
                    HIRect rc2;&lt;br /&gt;
                    &lt;br /&gt;
                    rc2.origin.x = rControlRegion.GetBoundRect().Left();&lt;br /&gt;
                    rc2.origin.y = rControlRegion.GetBoundRect().Top();&lt;br /&gt;
                    rc2.size.width = rControlRegion.GetBoundRect().GetWidth();&lt;br /&gt;
                    rc2.size.height = rControlRegion.GetBoundRect().GetHeight();&lt;br /&gt;
                    &lt;br /&gt;
                    HIComboBoxCreate ( &amp;amp;rc2 , NULL, NULL, NULL, kHIComboBoxStandardAttributes, &amp;amp;myCombo);&lt;br /&gt;
                    &lt;br /&gt;
                    HIViewSetVisible ( myCombo, true);&lt;br /&gt;
                    HIViewAddSubview (mrView, myCombo); &lt;br /&gt;
                    &lt;br /&gt;
                    HIViewSetNeedsDisplay (myCombo, true);                   &lt;br /&gt;
                    &lt;br /&gt;
                    printf (&amp;quot;rc2.origin.x %.0f  \n rc2.origin.y %.0f \n rc2.size.width %.0f \n rc2.size.height %.0f \n&amp;quot;, &lt;br /&gt;
                    rc2.origin.x, rc2.origin.y, rc2.size.width , rc2.size.height );&lt;br /&gt;
                                        &lt;br /&gt;
                    //HIViewSetActivated (myCombo,true);&lt;br /&gt;
&lt;br /&gt;
                     .....  (other code )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usefull Links ==  &lt;br /&gt;
&lt;br /&gt;
=== References ===&lt;br /&gt;
&lt;br /&gt;
[[http://developer.apple.com/documentation/Carbon/Conceptual/HandlingWindowsControls/hitb-wind_cont_tasks/chapter_3_section_9.html Introducing HIView]]&lt;br /&gt;
&lt;br /&gt;
OverView : [[http://developer.apple.com/carbon/HIToolbox_feature.html HIToolbox]] &lt;br /&gt;
&lt;br /&gt;
HIVIew  : [[http://developer.apple.com/documentation/Carbon/Reference/HIViewReference/Reference/reference.html reference]] [[http://developer.apple.com/documentation/Carbon/Reference/HIViewReference/HIViewReference.pdf or .pdf format]]&lt;br /&gt;
&lt;br /&gt;
[[http://developer.apple.com/documentation/Carbon/Conceptual/Upgrading_HIToolbox/index.html Upgrading to HIToolbox]]&lt;br /&gt;
&lt;br /&gt;
===Code sample ===&lt;br /&gt;
&lt;br /&gt;
Build a big toy with all controls included : [http://developer.apple.com/samplecode/AppearanceSampleUpdated/listing575.html All controls + code around]&lt;br /&gt;
&lt;br /&gt;
High Level Toolbox, HIServices Release Notes : [http://developer.apple.com/releasenotes/Carbon/RN-HIToolbox/ HIToolbox]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Porting]]&lt;br /&gt;
[[Category:MacOSX]]&lt;br /&gt;
[[Category:Aqua]]&lt;/div&gt;</summary>
		<author><name>Plipli</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Mac_OS_X_Implementing_HIView&amp;diff=27992</id>
		<title>Mac OS X Implementing HIView</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Mac_OS_X_Implementing_HIView&amp;diff=27992"/>
		<updated>2007-03-15T04:50:42Z</updated>

		<summary type="html">&lt;p&gt;Plipli: /* Controls */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Contributors ==&lt;br /&gt;
&lt;br /&gt;
Eric Bachard[[http://wiki.services.openoffice.org/wiki/User:Ericb ericb]]&lt;br /&gt;
&lt;br /&gt;
Sébastien Plisson [[http://wiki.services.openoffice.org/wiki/User:Plipli plipli]]&lt;br /&gt;
&lt;br /&gt;
== Introduction == &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[DRAFT]  : means,  not yet working, work in progress ... &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
HIObject is a common base class for all user interface objects and all menus, windows, controls, toolbars, and so on, are subclasses of HIObject.&lt;br /&gt;
&lt;br /&gt;
HIView is an object-oriented view system subclassed from HIObject. All controls are implemented as HIView objects (&amp;quot;views&amp;quot;). You can easily subclass HIView classes, making it easy to implement custom controls. Over time the HIView API will replace the current Control Manager. See [[http://developer.apple.com/documentation/Carbon/Conceptual/HandlingWindowsControls/hitb-wind_cont_tasks/chapter_3_section_9.html HIView intro]]&lt;br /&gt;
&lt;br /&gt;
The main idea behind HIView is to superpose plans, to create any view, using compositing possibilities of Quartz Graphical Engine. &lt;br /&gt;
&lt;br /&gt;
The final result is the superposition of all plans, following simple rules like :&lt;br /&gt;
&lt;br /&gt;
 - The last plan is always drawn on the previous one ;&lt;br /&gt;
 - Some plans can  be declared visible, or not, very easely.&lt;br /&gt;
&lt;br /&gt;
This page is part of [[http://wiki.services.openoffice.org/wiki/Mac_OS_X_Porting_-_Native_Controls Native Controls Implementation]] and the objective is to use HIView for HIComboboxes or other HI*  controls. &lt;br /&gt;
&lt;br /&gt;
Our objective is to bind vcl controls with HI* controls, from Carbon API. &lt;br /&gt;
&lt;br /&gt;
e.g.  :  implement HICombobox as one control only.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The generic implementation, under tests (and not fully working), uses : &lt;br /&gt;
&lt;br /&gt;
HI* events definitions in aquavclevents.hxx &lt;br /&gt;
&lt;br /&gt;
Event handler implementation in HandleHIViewEvent()&lt;br /&gt;
&lt;br /&gt;
The use of HandleHIViewEvent() in AquaSalFrame::CreateNewSystemWindow()&lt;br /&gt;
&lt;br /&gt;
The use of HI* controls, in vcl, when ::CreateNewSystemWindow() is used, calling HandleHIViewEvent(), when HI* events are detected in the frame.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note : we &amp;quot;or&amp;quot;- ed kWindowCompositingAttribute in nWindowAttributes, to see compositing effects. &lt;br /&gt;
[FIXME] : investigate, because use this attribute causes refresh issues&lt;br /&gt;
&lt;br /&gt;
== VCL / AQUA traces deductions (plipli) ==&lt;br /&gt;
1)&lt;br /&gt;
&lt;br /&gt;
== VCL / AQUA traces deductions (ericb) ==&lt;br /&gt;
1)&lt;br /&gt;
&lt;br /&gt;
== Technical principles ==&lt;br /&gt;
&lt;br /&gt;
1) OO ask to VCL / native implementation code to draw controls (ie DrawNativeControl) or images or text&lt;br /&gt;
&lt;br /&gt;
2) For controls, native implementation code create objects but do not draw them&lt;br /&gt;
For images and text, native code draw objects to context (from QDBegin) or context from HiView event&lt;br /&gt;
&lt;br /&gt;
3) When HIView events are received by event handler, especially kEventControlDraw, native code should draw controls to context given by the event&lt;br /&gt;
&lt;br /&gt;
4) Native code call needsDisplay functions to tell Quartz which zone to update&lt;br /&gt;
&lt;br /&gt;
== Current code implementation==&lt;br /&gt;
&lt;br /&gt;
===Events for HIView ===&lt;br /&gt;
&lt;br /&gt;
Two sorts of events are needed: &lt;br /&gt;
&lt;br /&gt;
*for objects (ClasskEventClassHIObject )  :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;kEventHIObjectConstruct&lt;br /&gt;
&lt;br /&gt;
kEventHIObjectInitialize&lt;br /&gt;
&lt;br /&gt;
kEventHIObjectDestruct&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*for controls themselves ( Class kEventClassControl ) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;kEventControlDraw &lt;br /&gt;
&lt;br /&gt;
kEventControlInitialize&lt;br /&gt;
&lt;br /&gt;
kEventControlHitTest&lt;br /&gt;
&lt;br /&gt;
kEventControlGetPartRegion&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Current implementation : see vcl/aqua/aquavclevents.hxx for more informations about the syntax.&lt;br /&gt;
&lt;br /&gt;
===Install Event Handler ===&lt;br /&gt;
&lt;br /&gt;
Now we have to install event Handler, inside AquaSalFrame::CreateNewSystemWindow() :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
InstallEventHandler (&lt;br /&gt;
                           GetControlEventTarget (mhView),&lt;br /&gt;
                           NewEventHandlerUPP (HandleHIViewEvent),&lt;br /&gt;
                           GetEventTypeCount (cHIViewEvent),&lt;br /&gt;
                           cHIViewEvent,&lt;br /&gt;
                           (void*)mhView, // note the use of the pointer &lt;br /&gt;
                           NULL&lt;br /&gt;
                           );&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== The HI* Event Handler ===&lt;br /&gt;
&lt;br /&gt;
The Handler is OSStatus type, and is used when events are detected.&lt;br /&gt;
&lt;br /&gt;
e.g.  : we created HandleHIViewEvent() &lt;br /&gt;
&lt;br /&gt;
using GetEventParameter, itself using the parameters described in Apple documentation. &lt;br /&gt;
&lt;br /&gt;
Code sample :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
OSStatus HandleHIViewEvent(EventHandlerCallRef inHandlerCallRef, EventRef inEvent, void* inUserData)&lt;br /&gt;
{ &lt;br /&gt;
    //lock&lt;br /&gt;
    ImplSalYieldMutexAcquire();&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    OSStatus status = noErr;&lt;br /&gt;
    &lt;br /&gt;
    // we use mrContext, global and seen from everywhere &lt;br /&gt;
    CGContextRef mrContext; &lt;br /&gt;
    &lt;br /&gt;
    // create HIRect, contianing the control bounds ( in local coordinates) &lt;br /&gt;
    HIRect bounds;  &lt;br /&gt;
&lt;br /&gt;
    status = GetEventParameter (inEvent, &lt;br /&gt;
                                kEventParamCGContextRef, &lt;br /&gt;
                                typeCGContextRef, &lt;br /&gt;
                                NULL, &lt;br /&gt;
                                sizeof (CGContextRef), &lt;br /&gt;
                                NULL, &lt;br /&gt;
                                &amp;amp;mrContext); &lt;br /&gt;
&lt;br /&gt;
    // not used, but usefull&lt;br /&gt;
    //require_noerr(status, CantGetGraphicsContext); // 2&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
    // We need to know the bounds containing the current control &lt;br /&gt;
    HIViewGetBounds ((HIViewRef) inUserData, &amp;amp;bounds); &lt;br /&gt;
&lt;br /&gt;
    // not used, but usefull&lt;br /&gt;
    //require_noerr(status, CantGetBoundingRectangle);&lt;br /&gt;
&lt;br /&gt;
    // unlock &lt;br /&gt;
    ImplSalYieldMutexRelease();&lt;br /&gt;
    &lt;br /&gt;
    return status;  &lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===HIView use in AquaSalFrame::CreateNewSystemWindow()  ===&lt;br /&gt;
&lt;br /&gt;
Code sample : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    //  TEST HIVIew part &lt;br /&gt;
    // Set mhView with HIView Content ViewRef&lt;br /&gt;
  &lt;br /&gt;
        HIRect myViewRect;&lt;br /&gt;
        myViewRect.origin.x = aContentRect.left; &lt;br /&gt;
        myViewRect.origin.y = aContentRect.right; &lt;br /&gt;
        myViewRect.size.width = aContentRect.right-aContentRect.left; &lt;br /&gt;
        myViewRect.size.height = aContentRect.bottom-aContentRect.top; &lt;br /&gt;
        OSStatus errval;&lt;br /&gt;
        errval = HIViewFindByID(HIViewGetRoot(mrWindow), kHIViewWindowContentID, &amp;amp;mhView); &lt;br /&gt;
&lt;br /&gt;
        // make the view visible                        &lt;br /&gt;
        HIViewSetVisible (mhView, true); &lt;br /&gt;
        &lt;br /&gt;
        // set the frame&lt;br /&gt;
        HIViewSetFrame (mhView, &amp;amp;myViewRect);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Controls ===&lt;br /&gt;
&lt;br /&gt;
[FIXME]&lt;br /&gt;
&lt;br /&gt;
Example : HICombobox&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; code located in vcl/aqua/source/gdi/salnativewidgets.cxx  , where all NWF are defined &lt;br /&gt;
&lt;br /&gt;
1) declare CTRL_COMBOBOX control as &amp;quot;true&amp;quot; in isNativeControlSupported() &lt;br /&gt;
&lt;br /&gt;
2) get the control region in getNativeControlRegion() &lt;br /&gt;
&lt;br /&gt;
3) add CTRL_COMBOBOX case in drawNativeControl()&lt;br /&gt;
&lt;br /&gt;
Code sample for the last part (Warning : not yet working !! ) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 switch( nType )&lt;br /&gt;
    {&lt;br /&gt;
            &lt;br /&gt;
        case CTRL_COMBOBOX:&lt;br /&gt;
        if ( ( nPart==PART_BUTTON_DOWN) ||  (nPart==PART_SUB_EDIT) || (nPart==PART_ENTIRE_CONTROL) || (nPart==HAS_BACKGROUND_TEXTURE))&lt;br /&gt;
&lt;br /&gt;
        .... (other code ) &lt;br /&gt;
&lt;br /&gt;
                    HIViewRef myCombo;&lt;br /&gt;
                                        &lt;br /&gt;
                    HIRect rc2;&lt;br /&gt;
                    &lt;br /&gt;
                    rc2.origin.x = rControlRegion.GetBoundRect().Left();&lt;br /&gt;
                    rc2.origin.y = rControlRegion.GetBoundRect().Top();&lt;br /&gt;
                    rc2.size.width = rControlRegion.GetBoundRect().GetWidth();&lt;br /&gt;
                    rc2.size.height = rControlRegion.GetBoundRect().GetHeight();&lt;br /&gt;
                    &lt;br /&gt;
                    HIComboBoxCreate ( &amp;amp;rc2 , NULL, NULL, NULL, kHIComboBoxStandardAttributes, &amp;amp;myCombo);&lt;br /&gt;
                    &lt;br /&gt;
                    HIViewSetVisible ( myCombo, true);&lt;br /&gt;
                    HIViewAddSubview (mrView, myCombo); &lt;br /&gt;
                    &lt;br /&gt;
                    HIViewSetNeedsDisplay (myCombo, true);                   &lt;br /&gt;
                    &lt;br /&gt;
                    printf (&amp;quot;rc2.origin.x %.0f  \n rc2.origin.y %.0f \n rc2.size.width %.0f \n rc2.size.height %.0f \n&amp;quot;, &lt;br /&gt;
                    rc2.origin.x, rc2.origin.y, rc2.size.width , rc2.size.height );&lt;br /&gt;
                                        &lt;br /&gt;
                    //HIViewSetActivated (myCombo,true);&lt;br /&gt;
&lt;br /&gt;
                     .....  (other code )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usefull Links ==  &lt;br /&gt;
&lt;br /&gt;
=== References ===&lt;br /&gt;
&lt;br /&gt;
[[http://developer.apple.com/documentation/Carbon/Conceptual/HandlingWindowsControls/hitb-wind_cont_tasks/chapter_3_section_9.html Introducing HIView]]&lt;br /&gt;
&lt;br /&gt;
OverView : [[http://developer.apple.com/carbon/HIToolbox_feature.html HIToolbox]] &lt;br /&gt;
&lt;br /&gt;
HIVIew  : [[http://developer.apple.com/documentation/Carbon/Reference/HIViewReference/Reference/reference.html reference]] [[http://developer.apple.com/documentation/Carbon/Reference/HIViewReference/HIViewReference.pdf or .pdf format]]&lt;br /&gt;
&lt;br /&gt;
[[http://developer.apple.com/documentation/Carbon/Conceptual/Upgrading_HIToolbox/index.html Upgrading to HIToolbox]]&lt;br /&gt;
&lt;br /&gt;
===Code sample ===&lt;br /&gt;
&lt;br /&gt;
Build a big toy with all controls included : [http://developer.apple.com/samplecode/AppearanceSampleUpdated/listing575.html All controls + code around]&lt;br /&gt;
&lt;br /&gt;
High Level Toolbox, HIServices Release Notes : [http://developer.apple.com/releasenotes/Carbon/RN-HIToolbox/ HIToolbox]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Porting]]&lt;br /&gt;
[[Category:MacOSX]]&lt;br /&gt;
[[Category:Aqua]]&lt;/div&gt;</summary>
		<author><name>Plipli</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Mac_OS_X_Implementing_HIView&amp;diff=27956</id>
		<title>Mac OS X Implementing HIView</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Mac_OS_X_Implementing_HIView&amp;diff=27956"/>
		<updated>2007-03-14T19:16:17Z</updated>

		<summary type="html">&lt;p&gt;Plipli: /* VCL traces deductions (plipli) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Contributors ==&lt;br /&gt;
&lt;br /&gt;
Eric Bachard[[http://wiki.services.openoffice.org/wiki/User:Ericb ericb]]&lt;br /&gt;
&lt;br /&gt;
Sébastien Plisson [[http://wiki.services.openoffice.org/wiki/User:Plipli plipli]]&lt;br /&gt;
&lt;br /&gt;
== Introduction == &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[DRAFT]  : means,  not yet working, work in progress ... &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
HIObject is a common base class for all user interface objects and all menus, windows, controls, toolbars, and so on, are subclasses of HIObject.&lt;br /&gt;
&lt;br /&gt;
HIView is an object-oriented view system subclassed from HIObject. All controls are implemented as HIView objects (&amp;quot;views&amp;quot;). You can easily subclass HIView classes, making it easy to implement custom controls. Over time the HIView API will replace the current Control Manager. See [[http://developer.apple.com/documentation/Carbon/Conceptual/HandlingWindowsControls/hitb-wind_cont_tasks/chapter_3_section_9.html HIView intro]]&lt;br /&gt;
&lt;br /&gt;
The main idea behind HIView is to superpose plans, to create any view, using compositing possibilities of Quartz Graphical Engine. &lt;br /&gt;
&lt;br /&gt;
The final result is the superposition of all plans, following simple rules like :&lt;br /&gt;
&lt;br /&gt;
 - The last plan is always drawn on the previous one ;&lt;br /&gt;
 - Some plans can  be declared visible, or not, very easely.&lt;br /&gt;
&lt;br /&gt;
This page is part of [[http://wiki.services.openoffice.org/wiki/Mac_OS_X_Porting_-_Native_Controls Native Controls Implementation]] and the objective is to use HIView for HIComboboxes or other HI*  controls. &lt;br /&gt;
&lt;br /&gt;
Our objective is to bind vcl controls with HI* controls, from Carbon API. &lt;br /&gt;
&lt;br /&gt;
e.g.  :  implement HICombobox as one control only.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The generic implementation, under tests (and not fully working), uses : &lt;br /&gt;
&lt;br /&gt;
HI* events definitions in aquavclevents.hxx &lt;br /&gt;
&lt;br /&gt;
Event handler implementation in HandleHIViewEvent()&lt;br /&gt;
&lt;br /&gt;
The use of HandleHIViewEvent() in AquaSalFrame::CreateNewSystemWindow()&lt;br /&gt;
&lt;br /&gt;
The use of HI* controls, in vcl, when ::CreateNewSystemWindow() is used, calling HandleHIViewEvent(), when HI* events are detected in the frame.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note : we &amp;quot;or&amp;quot;- ed kWindowCompositingAttribute in nWindowAttributes, to see compositing effects. &lt;br /&gt;
[FIXME] : investigate, because use this attribute causes refresh issues&lt;br /&gt;
&lt;br /&gt;
== VCL / AQUA traces deductions (plipli) ==&lt;br /&gt;
1)&lt;br /&gt;
&lt;br /&gt;
== VCL / AQUA traces deductions (ericb) ==&lt;br /&gt;
1)&lt;br /&gt;
&lt;br /&gt;
== Technical principles ==&lt;br /&gt;
&lt;br /&gt;
1) OO ask to VCL / native implementation code to draw controls (ie DrawNativeControl) or images or text&lt;br /&gt;
&lt;br /&gt;
2) For controls, native implementation code create objects but do not draw them&lt;br /&gt;
For images and text, native code draw objects to context (from QDBegin) or context from HiView event&lt;br /&gt;
&lt;br /&gt;
3) When HIView events are received by event handler, especially kEventControlDraw, native code should draw controls to context given by the event&lt;br /&gt;
&lt;br /&gt;
4) Native code call needsDisplay functions to tell Quartz which zone to update&lt;br /&gt;
&lt;br /&gt;
== Current code implementation==&lt;br /&gt;
&lt;br /&gt;
===Events for HIView ===&lt;br /&gt;
&lt;br /&gt;
Two sorts of events are needed: &lt;br /&gt;
&lt;br /&gt;
*for objects (ClasskEventClassHIObject )  :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;kEventHIObjectConstruct&lt;br /&gt;
&lt;br /&gt;
kEventHIObjectInitialize&lt;br /&gt;
&lt;br /&gt;
kEventHIObjectDestruct&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*for controls themselves ( Class kEventClassControl ) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;kEventControlDraw &lt;br /&gt;
&lt;br /&gt;
kEventControlInitialize&lt;br /&gt;
&lt;br /&gt;
kEventControlHitTest&lt;br /&gt;
&lt;br /&gt;
kEventControlGetPartRegion&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Current implementation : see vcl/aqua/aquavclevents.hxx for more informations about the syntax.&lt;br /&gt;
&lt;br /&gt;
===Install Event Handler ===&lt;br /&gt;
&lt;br /&gt;
Now we have to install event Handler, inside AquaSalFrame::CreateNewSystemWindow() :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
InstallEventHandler (&lt;br /&gt;
                           GetControlEventTarget (mhView),&lt;br /&gt;
                           NewEventHandlerUPP (HandleHIViewEvent),&lt;br /&gt;
                           GetEventTypeCount (cHIViewEvent),&lt;br /&gt;
                           cHIViewEvent,&lt;br /&gt;
                           (void*)mhView, // note the use of the pointer &lt;br /&gt;
                           NULL&lt;br /&gt;
                           );&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== The HI* Event Handler ===&lt;br /&gt;
&lt;br /&gt;
The Handler is OSStatus type, and is used when events are detected.&lt;br /&gt;
&lt;br /&gt;
e.g.  : we created HandleHIViewEvent() &lt;br /&gt;
&lt;br /&gt;
using GetEventParameter, itself using the parameters described in Apple documentation. &lt;br /&gt;
&lt;br /&gt;
Code sample :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
OSStatus HandleHIViewEvent(EventHandlerCallRef inHandlerCallRef, EventRef inEvent, void* inUserData)&lt;br /&gt;
{ &lt;br /&gt;
    //lock&lt;br /&gt;
    ImplSalYieldMutexAcquire();&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    OSStatus status = noErr;&lt;br /&gt;
    &lt;br /&gt;
    // we use mrContext, global and seen from everywhere &lt;br /&gt;
    CGContextRef mrContext; &lt;br /&gt;
    &lt;br /&gt;
    // create HIRect, contianing the control bounds ( in local coordinates) &lt;br /&gt;
    HIRect bounds;  &lt;br /&gt;
&lt;br /&gt;
    status = GetEventParameter (inEvent, &lt;br /&gt;
                                kEventParamCGContextRef, &lt;br /&gt;
                                typeCGContextRef, &lt;br /&gt;
                                NULL, &lt;br /&gt;
                                sizeof (CGContextRef), &lt;br /&gt;
                                NULL, &lt;br /&gt;
                                &amp;amp;mrContext); &lt;br /&gt;
&lt;br /&gt;
    // not used, but usefull&lt;br /&gt;
    //require_noerr(status, CantGetGraphicsContext); // 2&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
    // We need to know the bounds containing the current control &lt;br /&gt;
    HIViewGetBounds ((HIViewRef) inUserData, &amp;amp;bounds); &lt;br /&gt;
&lt;br /&gt;
    // not used, but usefull&lt;br /&gt;
    //require_noerr(status, CantGetBoundingRectangle);&lt;br /&gt;
&lt;br /&gt;
    // unlock &lt;br /&gt;
    ImplSalYieldMutexRelease();&lt;br /&gt;
    &lt;br /&gt;
    return status;  &lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===HIView use in AquaSalFrame::CreateNewSystemWindow()  ===&lt;br /&gt;
&lt;br /&gt;
Code sample : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    //  TEST HIVIew part &lt;br /&gt;
    // Set mhView with HIView Content ViewRef&lt;br /&gt;
  &lt;br /&gt;
        HIRect myViewRect;&lt;br /&gt;
        myViewRect.origin.x = aContentRect.left; &lt;br /&gt;
        myViewRect.origin.y = aContentRect.right; &lt;br /&gt;
        myViewRect.size.width = aContentRect.right-aContentRect.left; &lt;br /&gt;
        myViewRect.size.height = aContentRect.bottom-aContentRect.top; &lt;br /&gt;
        OSStatus errval;&lt;br /&gt;
        errval = HIViewFindByID(HIViewGetRoot(mrWindow), kHIViewWindowContentID, &amp;amp;mhView); &lt;br /&gt;
&lt;br /&gt;
        // make the view visible                        &lt;br /&gt;
        HIViewSetVisible (mhView, true); &lt;br /&gt;
        &lt;br /&gt;
        // set the frame&lt;br /&gt;
        HIViewSetFrame (mhView, &amp;amp;myViewRect);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Controls ===&lt;br /&gt;
&lt;br /&gt;
[FIXME]&lt;br /&gt;
&lt;br /&gt;
Example : HICombobox&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; code located in vcl/aqua/source/gdi/salnativewidgets.cxx  , where all NWF are defined &lt;br /&gt;
&lt;br /&gt;
1) declare CTRL_COMBOBOX control as &amp;quot;true&amp;quot; in isNativeControlSupported() &lt;br /&gt;
&lt;br /&gt;
2) get the control region in getNativeControlRegion() &lt;br /&gt;
&lt;br /&gt;
3) add CTRL_COMBOBOX case in drawNativeControl()&lt;br /&gt;
&lt;br /&gt;
Code sample for the last part (Warning : not yet working !! ) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 switch( nType )&lt;br /&gt;
    {&lt;br /&gt;
            &lt;br /&gt;
        case CTRL_COMBOBOX:&lt;br /&gt;
        if ( ( nPart==PART_BUTTON_DOWN) ||  (nPart==PART_SUB_EDIT) || (nPart==PART_ENTIRE_CONTROL) || (nPart==HAS_BACKGROUND_TEXTURE))&lt;br /&gt;
&lt;br /&gt;
        .... (other code ) &lt;br /&gt;
&lt;br /&gt;
                if( BeginGraphics() )&lt;br /&gt;
                {&lt;br /&gt;
                    HIViewRef myCombo;&lt;br /&gt;
                    &lt;br /&gt;
                    HIRect rc2;&lt;br /&gt;
                    &lt;br /&gt;
                    rc2.origin.x = rControlRegion.GetBoundRect().Left();&lt;br /&gt;
                    rc2.origin.y = rControlRegion.GetBoundRect().Top();&lt;br /&gt;
                    rc2.size.width = rControlRegion.GetBoundRect().GetWidth();&lt;br /&gt;
                    rc2.size.height = rControlRegion.GetBoundRect().GetHeight();&lt;br /&gt;
&lt;br /&gt;
                    HIComboBoxCreate ( &amp;amp;rc2 , NULL, NULL, NULL, kHIComboBoxStandardAttributes, &amp;amp;myCombo);&lt;br /&gt;
                    HIViewSetVisible ( myCombo, true);&lt;br /&gt;
                    HIViewAddSubview (mrView, myCombo); &lt;br /&gt;
                    HIViewSetNeedsDisplay (myCombo, true);&lt;br /&gt;
                    					&lt;br /&gt;
                    EndGraphics();&lt;br /&gt;
                    return true;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
      .....  (other code )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usefull Links ==  &lt;br /&gt;
&lt;br /&gt;
=== References ===&lt;br /&gt;
&lt;br /&gt;
[[http://developer.apple.com/documentation/Carbon/Conceptual/HandlingWindowsControls/hitb-wind_cont_tasks/chapter_3_section_9.html Introducing HIView]]&lt;br /&gt;
&lt;br /&gt;
OverView : [[http://developer.apple.com/carbon/HIToolbox_feature.html HIToolbox]] &lt;br /&gt;
&lt;br /&gt;
HIVIew  : [[http://developer.apple.com/documentation/Carbon/Reference/HIViewReference/Reference/reference.html reference]] [[http://developer.apple.com/documentation/Carbon/Reference/HIViewReference/HIViewReference.pdf or .pdf format]]&lt;br /&gt;
&lt;br /&gt;
[[http://developer.apple.com/documentation/Carbon/Conceptual/Upgrading_HIToolbox/index.html Upgrading to HIToolbox]]&lt;br /&gt;
&lt;br /&gt;
===Code sample ===&lt;br /&gt;
&lt;br /&gt;
Build a big toy with all controls included : [http://developer.apple.com/samplecode/AppearanceSampleUpdated/listing575.html All controls + code around]&lt;br /&gt;
&lt;br /&gt;
High Level Toolbox, HIServices Release Notes : [http://developer.apple.com/releasenotes/Carbon/RN-HIToolbox/ HIToolbox]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Porting]]&lt;br /&gt;
[[Category:MacOSX]]&lt;br /&gt;
[[Category:Aqua]]&lt;/div&gt;</summary>
		<author><name>Plipli</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Mac_OS_X_Implementing_HIView&amp;diff=27955</id>
		<title>Mac OS X Implementing HIView</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Mac_OS_X_Implementing_HIView&amp;diff=27955"/>
		<updated>2007-03-14T19:16:01Z</updated>

		<summary type="html">&lt;p&gt;Plipli: /* VCL traces deductions (plipli) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Contributors ==&lt;br /&gt;
&lt;br /&gt;
Eric Bachard[[http://wiki.services.openoffice.org/wiki/User:Ericb ericb]]&lt;br /&gt;
&lt;br /&gt;
Sébastien Plisson [[http://wiki.services.openoffice.org/wiki/User:Plipli plipli]]&lt;br /&gt;
&lt;br /&gt;
== Introduction == &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[DRAFT]  : means,  not yet working, work in progress ... &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
HIObject is a common base class for all user interface objects and all menus, windows, controls, toolbars, and so on, are subclasses of HIObject.&lt;br /&gt;
&lt;br /&gt;
HIView is an object-oriented view system subclassed from HIObject. All controls are implemented as HIView objects (&amp;quot;views&amp;quot;). You can easily subclass HIView classes, making it easy to implement custom controls. Over time the HIView API will replace the current Control Manager. See [[http://developer.apple.com/documentation/Carbon/Conceptual/HandlingWindowsControls/hitb-wind_cont_tasks/chapter_3_section_9.html HIView intro]]&lt;br /&gt;
&lt;br /&gt;
The main idea behind HIView is to superpose plans, to create any view, using compositing possibilities of Quartz Graphical Engine. &lt;br /&gt;
&lt;br /&gt;
The final result is the superposition of all plans, following simple rules like :&lt;br /&gt;
&lt;br /&gt;
 - The last plan is always drawn on the previous one ;&lt;br /&gt;
 - Some plans can  be declared visible, or not, very easely.&lt;br /&gt;
&lt;br /&gt;
This page is part of [[http://wiki.services.openoffice.org/wiki/Mac_OS_X_Porting_-_Native_Controls Native Controls Implementation]] and the objective is to use HIView for HIComboboxes or other HI*  controls. &lt;br /&gt;
&lt;br /&gt;
Our objective is to bind vcl controls with HI* controls, from Carbon API. &lt;br /&gt;
&lt;br /&gt;
e.g.  :  implement HICombobox as one control only.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The generic implementation, under tests (and not fully working), uses : &lt;br /&gt;
&lt;br /&gt;
HI* events definitions in aquavclevents.hxx &lt;br /&gt;
&lt;br /&gt;
Event handler implementation in HandleHIViewEvent()&lt;br /&gt;
&lt;br /&gt;
The use of HandleHIViewEvent() in AquaSalFrame::CreateNewSystemWindow()&lt;br /&gt;
&lt;br /&gt;
The use of HI* controls, in vcl, when ::CreateNewSystemWindow() is used, calling HandleHIViewEvent(), when HI* events are detected in the frame.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note : we &amp;quot;or&amp;quot;- ed kWindowCompositingAttribute in nWindowAttributes, to see compositing effects. &lt;br /&gt;
[FIXME] : investigate, because use this attribute causes refresh issues&lt;br /&gt;
&lt;br /&gt;
== VCL traces deductions (plipli) ==&lt;br /&gt;
1)&lt;br /&gt;
&lt;br /&gt;
== VCL / AQUA traces deductions (ericb) ==&lt;br /&gt;
1)&lt;br /&gt;
&lt;br /&gt;
== Technical principles ==&lt;br /&gt;
&lt;br /&gt;
1) OO ask to VCL / native implementation code to draw controls (ie DrawNativeControl) or images or text&lt;br /&gt;
&lt;br /&gt;
2) For controls, native implementation code create objects but do not draw them&lt;br /&gt;
For images and text, native code draw objects to context (from QDBegin) or context from HiView event&lt;br /&gt;
&lt;br /&gt;
3) When HIView events are received by event handler, especially kEventControlDraw, native code should draw controls to context given by the event&lt;br /&gt;
&lt;br /&gt;
4) Native code call needsDisplay functions to tell Quartz which zone to update&lt;br /&gt;
&lt;br /&gt;
== Current code implementation==&lt;br /&gt;
&lt;br /&gt;
===Events for HIView ===&lt;br /&gt;
&lt;br /&gt;
Two sorts of events are needed: &lt;br /&gt;
&lt;br /&gt;
*for objects (ClasskEventClassHIObject )  :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;kEventHIObjectConstruct&lt;br /&gt;
&lt;br /&gt;
kEventHIObjectInitialize&lt;br /&gt;
&lt;br /&gt;
kEventHIObjectDestruct&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*for controls themselves ( Class kEventClassControl ) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;kEventControlDraw &lt;br /&gt;
&lt;br /&gt;
kEventControlInitialize&lt;br /&gt;
&lt;br /&gt;
kEventControlHitTest&lt;br /&gt;
&lt;br /&gt;
kEventControlGetPartRegion&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Current implementation : see vcl/aqua/aquavclevents.hxx for more informations about the syntax.&lt;br /&gt;
&lt;br /&gt;
===Install Event Handler ===&lt;br /&gt;
&lt;br /&gt;
Now we have to install event Handler, inside AquaSalFrame::CreateNewSystemWindow() :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
InstallEventHandler (&lt;br /&gt;
                           GetControlEventTarget (mhView),&lt;br /&gt;
                           NewEventHandlerUPP (HandleHIViewEvent),&lt;br /&gt;
                           GetEventTypeCount (cHIViewEvent),&lt;br /&gt;
                           cHIViewEvent,&lt;br /&gt;
                           (void*)mhView, // note the use of the pointer &lt;br /&gt;
                           NULL&lt;br /&gt;
                           );&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== The HI* Event Handler ===&lt;br /&gt;
&lt;br /&gt;
The Handler is OSStatus type, and is used when events are detected.&lt;br /&gt;
&lt;br /&gt;
e.g.  : we created HandleHIViewEvent() &lt;br /&gt;
&lt;br /&gt;
using GetEventParameter, itself using the parameters described in Apple documentation. &lt;br /&gt;
&lt;br /&gt;
Code sample :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
OSStatus HandleHIViewEvent(EventHandlerCallRef inHandlerCallRef, EventRef inEvent, void* inUserData)&lt;br /&gt;
{ &lt;br /&gt;
    //lock&lt;br /&gt;
    ImplSalYieldMutexAcquire();&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    OSStatus status = noErr;&lt;br /&gt;
    &lt;br /&gt;
    // we use mrContext, global and seen from everywhere &lt;br /&gt;
    CGContextRef mrContext; &lt;br /&gt;
    &lt;br /&gt;
    // create HIRect, contianing the control bounds ( in local coordinates) &lt;br /&gt;
    HIRect bounds;  &lt;br /&gt;
&lt;br /&gt;
    status = GetEventParameter (inEvent, &lt;br /&gt;
                                kEventParamCGContextRef, &lt;br /&gt;
                                typeCGContextRef, &lt;br /&gt;
                                NULL, &lt;br /&gt;
                                sizeof (CGContextRef), &lt;br /&gt;
                                NULL, &lt;br /&gt;
                                &amp;amp;mrContext); &lt;br /&gt;
&lt;br /&gt;
    // not used, but usefull&lt;br /&gt;
    //require_noerr(status, CantGetGraphicsContext); // 2&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
    // We need to know the bounds containing the current control &lt;br /&gt;
    HIViewGetBounds ((HIViewRef) inUserData, &amp;amp;bounds); &lt;br /&gt;
&lt;br /&gt;
    // not used, but usefull&lt;br /&gt;
    //require_noerr(status, CantGetBoundingRectangle);&lt;br /&gt;
&lt;br /&gt;
    // unlock &lt;br /&gt;
    ImplSalYieldMutexRelease();&lt;br /&gt;
    &lt;br /&gt;
    return status;  &lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===HIView use in AquaSalFrame::CreateNewSystemWindow()  ===&lt;br /&gt;
&lt;br /&gt;
Code sample : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    //  TEST HIVIew part &lt;br /&gt;
    // Set mhView with HIView Content ViewRef&lt;br /&gt;
  &lt;br /&gt;
        HIRect myViewRect;&lt;br /&gt;
        myViewRect.origin.x = aContentRect.left; &lt;br /&gt;
        myViewRect.origin.y = aContentRect.right; &lt;br /&gt;
        myViewRect.size.width = aContentRect.right-aContentRect.left; &lt;br /&gt;
        myViewRect.size.height = aContentRect.bottom-aContentRect.top; &lt;br /&gt;
        OSStatus errval;&lt;br /&gt;
        errval = HIViewFindByID(HIViewGetRoot(mrWindow), kHIViewWindowContentID, &amp;amp;mhView); &lt;br /&gt;
&lt;br /&gt;
        // make the view visible                        &lt;br /&gt;
        HIViewSetVisible (mhView, true); &lt;br /&gt;
        &lt;br /&gt;
        // set the frame&lt;br /&gt;
        HIViewSetFrame (mhView, &amp;amp;myViewRect);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Controls ===&lt;br /&gt;
&lt;br /&gt;
[FIXME]&lt;br /&gt;
&lt;br /&gt;
Example : HICombobox&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; code located in vcl/aqua/source/gdi/salnativewidgets.cxx  , where all NWF are defined &lt;br /&gt;
&lt;br /&gt;
1) declare CTRL_COMBOBOX control as &amp;quot;true&amp;quot; in isNativeControlSupported() &lt;br /&gt;
&lt;br /&gt;
2) get the control region in getNativeControlRegion() &lt;br /&gt;
&lt;br /&gt;
3) add CTRL_COMBOBOX case in drawNativeControl()&lt;br /&gt;
&lt;br /&gt;
Code sample for the last part (Warning : not yet working !! ) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 switch( nType )&lt;br /&gt;
    {&lt;br /&gt;
            &lt;br /&gt;
        case CTRL_COMBOBOX:&lt;br /&gt;
        if ( ( nPart==PART_BUTTON_DOWN) ||  (nPart==PART_SUB_EDIT) || (nPart==PART_ENTIRE_CONTROL) || (nPart==HAS_BACKGROUND_TEXTURE))&lt;br /&gt;
&lt;br /&gt;
        .... (other code ) &lt;br /&gt;
&lt;br /&gt;
                if( BeginGraphics() )&lt;br /&gt;
                {&lt;br /&gt;
                    HIViewRef myCombo;&lt;br /&gt;
                    &lt;br /&gt;
                    HIRect rc2;&lt;br /&gt;
                    &lt;br /&gt;
                    rc2.origin.x = rControlRegion.GetBoundRect().Left();&lt;br /&gt;
                    rc2.origin.y = rControlRegion.GetBoundRect().Top();&lt;br /&gt;
                    rc2.size.width = rControlRegion.GetBoundRect().GetWidth();&lt;br /&gt;
                    rc2.size.height = rControlRegion.GetBoundRect().GetHeight();&lt;br /&gt;
&lt;br /&gt;
                    HIComboBoxCreate ( &amp;amp;rc2 , NULL, NULL, NULL, kHIComboBoxStandardAttributes, &amp;amp;myCombo);&lt;br /&gt;
                    HIViewSetVisible ( myCombo, true);&lt;br /&gt;
                    HIViewAddSubview (mrView, myCombo); &lt;br /&gt;
                    HIViewSetNeedsDisplay (myCombo, true);&lt;br /&gt;
                    					&lt;br /&gt;
                    EndGraphics();&lt;br /&gt;
                    return true;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
      .....  (other code )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usefull Links ==  &lt;br /&gt;
&lt;br /&gt;
=== References ===&lt;br /&gt;
&lt;br /&gt;
[[http://developer.apple.com/documentation/Carbon/Conceptual/HandlingWindowsControls/hitb-wind_cont_tasks/chapter_3_section_9.html Introducing HIView]]&lt;br /&gt;
&lt;br /&gt;
OverView : [[http://developer.apple.com/carbon/HIToolbox_feature.html HIToolbox]] &lt;br /&gt;
&lt;br /&gt;
HIVIew  : [[http://developer.apple.com/documentation/Carbon/Reference/HIViewReference/Reference/reference.html reference]] [[http://developer.apple.com/documentation/Carbon/Reference/HIViewReference/HIViewReference.pdf or .pdf format]]&lt;br /&gt;
&lt;br /&gt;
[[http://developer.apple.com/documentation/Carbon/Conceptual/Upgrading_HIToolbox/index.html Upgrading to HIToolbox]]&lt;br /&gt;
&lt;br /&gt;
===Code sample ===&lt;br /&gt;
&lt;br /&gt;
Build a big toy with all controls included : [http://developer.apple.com/samplecode/AppearanceSampleUpdated/listing575.html All controls + code around]&lt;br /&gt;
&lt;br /&gt;
High Level Toolbox, HIServices Release Notes : [http://developer.apple.com/releasenotes/Carbon/RN-HIToolbox/ HIToolbox]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Porting]]&lt;br /&gt;
[[Category:MacOSX]]&lt;br /&gt;
[[Category:Aqua]]&lt;/div&gt;</summary>
		<author><name>Plipli</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Mac_OS_X_Implementing_HIView&amp;diff=27954</id>
		<title>Mac OS X Implementing HIView</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Mac_OS_X_Implementing_HIView&amp;diff=27954"/>
		<updated>2007-03-14T19:15:10Z</updated>

		<summary type="html">&lt;p&gt;Plipli: /* Technical principles */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Contributors ==&lt;br /&gt;
&lt;br /&gt;
Eric Bachard[[http://wiki.services.openoffice.org/wiki/User:Ericb ericb]]&lt;br /&gt;
&lt;br /&gt;
Sébastien Plisson [[http://wiki.services.openoffice.org/wiki/User:Plipli plipli]]&lt;br /&gt;
&lt;br /&gt;
== Introduction == &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[DRAFT]  : means,  not yet working, work in progress ... &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
HIObject is a common base class for all user interface objects and all menus, windows, controls, toolbars, and so on, are subclasses of HIObject.&lt;br /&gt;
&lt;br /&gt;
HIView is an object-oriented view system subclassed from HIObject. All controls are implemented as HIView objects (&amp;quot;views&amp;quot;). You can easily subclass HIView classes, making it easy to implement custom controls. Over time the HIView API will replace the current Control Manager. See [[http://developer.apple.com/documentation/Carbon/Conceptual/HandlingWindowsControls/hitb-wind_cont_tasks/chapter_3_section_9.html HIView intro]]&lt;br /&gt;
&lt;br /&gt;
The main idea behind HIView is to superpose plans, to create any view, using compositing possibilities of Quartz Graphical Engine. &lt;br /&gt;
&lt;br /&gt;
The final result is the superposition of all plans, following simple rules like :&lt;br /&gt;
&lt;br /&gt;
 - The last plan is always drawn on the previous one ;&lt;br /&gt;
 - Some plans can  be declared visible, or not, very easely.&lt;br /&gt;
&lt;br /&gt;
This page is part of [[http://wiki.services.openoffice.org/wiki/Mac_OS_X_Porting_-_Native_Controls Native Controls Implementation]] and the objective is to use HIView for HIComboboxes or other HI*  controls. &lt;br /&gt;
&lt;br /&gt;
Our objective is to bind vcl controls with HI* controls, from Carbon API. &lt;br /&gt;
&lt;br /&gt;
e.g.  :  implement HICombobox as one control only.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The generic implementation, under tests (and not fully working), uses : &lt;br /&gt;
&lt;br /&gt;
HI* events definitions in aquavclevents.hxx &lt;br /&gt;
&lt;br /&gt;
Event handler implementation in HandleHIViewEvent()&lt;br /&gt;
&lt;br /&gt;
The use of HandleHIViewEvent() in AquaSalFrame::CreateNewSystemWindow()&lt;br /&gt;
&lt;br /&gt;
The use of HI* controls, in vcl, when ::CreateNewSystemWindow() is used, calling HandleHIViewEvent(), when HI* events are detected in the frame.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note : we &amp;quot;or&amp;quot;- ed kWindowCompositingAttribute in nWindowAttributes, to see compositing effects. &lt;br /&gt;
[FIXME] : investigate, because use this attribute causes refresh issues&lt;br /&gt;
&lt;br /&gt;
== VCL traces deductions (plipli) ==&lt;br /&gt;
1)&lt;br /&gt;
&lt;br /&gt;
== VCL traces deductions (plipli) ==&lt;br /&gt;
1)&lt;br /&gt;
&lt;br /&gt;
== Technical principles ==&lt;br /&gt;
&lt;br /&gt;
1) OO ask to VCL / native implementation code to draw controls (ie DrawNativeControl) or images or text&lt;br /&gt;
&lt;br /&gt;
2) For controls, native implementation code create objects but do not draw them&lt;br /&gt;
For images and text, native code draw objects to context (from QDBegin) or context from HiView event&lt;br /&gt;
&lt;br /&gt;
3) When HIView events are received by event handler, especially kEventControlDraw, native code should draw controls to context given by the event&lt;br /&gt;
&lt;br /&gt;
4) Native code call needsDisplay functions to tell Quartz which zone to update&lt;br /&gt;
&lt;br /&gt;
== Current code implementation==&lt;br /&gt;
&lt;br /&gt;
===Events for HIView ===&lt;br /&gt;
&lt;br /&gt;
Two sorts of events are needed: &lt;br /&gt;
&lt;br /&gt;
*for objects (ClasskEventClassHIObject )  :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;kEventHIObjectConstruct&lt;br /&gt;
&lt;br /&gt;
kEventHIObjectInitialize&lt;br /&gt;
&lt;br /&gt;
kEventHIObjectDestruct&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*for controls themselves ( Class kEventClassControl ) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;kEventControlDraw &lt;br /&gt;
&lt;br /&gt;
kEventControlInitialize&lt;br /&gt;
&lt;br /&gt;
kEventControlHitTest&lt;br /&gt;
&lt;br /&gt;
kEventControlGetPartRegion&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Current implementation : see vcl/aqua/aquavclevents.hxx for more informations about the syntax.&lt;br /&gt;
&lt;br /&gt;
===Install Event Handler ===&lt;br /&gt;
&lt;br /&gt;
Now we have to install event Handler, inside AquaSalFrame::CreateNewSystemWindow() :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
InstallEventHandler (&lt;br /&gt;
                           GetControlEventTarget (mhView),&lt;br /&gt;
                           NewEventHandlerUPP (HandleHIViewEvent),&lt;br /&gt;
                           GetEventTypeCount (cHIViewEvent),&lt;br /&gt;
                           cHIViewEvent,&lt;br /&gt;
                           (void*)mhView, // note the use of the pointer &lt;br /&gt;
                           NULL&lt;br /&gt;
                           );&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== The HI* Event Handler ===&lt;br /&gt;
&lt;br /&gt;
The Handler is OSStatus type, and is used when events are detected.&lt;br /&gt;
&lt;br /&gt;
e.g.  : we created HandleHIViewEvent() &lt;br /&gt;
&lt;br /&gt;
using GetEventParameter, itself using the parameters described in Apple documentation. &lt;br /&gt;
&lt;br /&gt;
Code sample :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
OSStatus HandleHIViewEvent(EventHandlerCallRef inHandlerCallRef, EventRef inEvent, void* inUserData)&lt;br /&gt;
{ &lt;br /&gt;
    //lock&lt;br /&gt;
    ImplSalYieldMutexAcquire();&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    OSStatus status = noErr;&lt;br /&gt;
    &lt;br /&gt;
    // we use mrContext, global and seen from everywhere &lt;br /&gt;
    CGContextRef mrContext; &lt;br /&gt;
    &lt;br /&gt;
    // create HIRect, contianing the control bounds ( in local coordinates) &lt;br /&gt;
    HIRect bounds;  &lt;br /&gt;
&lt;br /&gt;
    status = GetEventParameter (inEvent, &lt;br /&gt;
                                kEventParamCGContextRef, &lt;br /&gt;
                                typeCGContextRef, &lt;br /&gt;
                                NULL, &lt;br /&gt;
                                sizeof (CGContextRef), &lt;br /&gt;
                                NULL, &lt;br /&gt;
                                &amp;amp;mrContext); &lt;br /&gt;
&lt;br /&gt;
    // not used, but usefull&lt;br /&gt;
    //require_noerr(status, CantGetGraphicsContext); // 2&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
    // We need to know the bounds containing the current control &lt;br /&gt;
    HIViewGetBounds ((HIViewRef) inUserData, &amp;amp;bounds); &lt;br /&gt;
&lt;br /&gt;
    // not used, but usefull&lt;br /&gt;
    //require_noerr(status, CantGetBoundingRectangle);&lt;br /&gt;
&lt;br /&gt;
    // unlock &lt;br /&gt;
    ImplSalYieldMutexRelease();&lt;br /&gt;
    &lt;br /&gt;
    return status;  &lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===HIView use in AquaSalFrame::CreateNewSystemWindow()  ===&lt;br /&gt;
&lt;br /&gt;
Code sample : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    //  TEST HIVIew part &lt;br /&gt;
    // Set mhView with HIView Content ViewRef&lt;br /&gt;
  &lt;br /&gt;
        HIRect myViewRect;&lt;br /&gt;
        myViewRect.origin.x = aContentRect.left; &lt;br /&gt;
        myViewRect.origin.y = aContentRect.right; &lt;br /&gt;
        myViewRect.size.width = aContentRect.right-aContentRect.left; &lt;br /&gt;
        myViewRect.size.height = aContentRect.bottom-aContentRect.top; &lt;br /&gt;
        OSStatus errval;&lt;br /&gt;
        errval = HIViewFindByID(HIViewGetRoot(mrWindow), kHIViewWindowContentID, &amp;amp;mhView); &lt;br /&gt;
&lt;br /&gt;
        // make the view visible                        &lt;br /&gt;
        HIViewSetVisible (mhView, true); &lt;br /&gt;
        &lt;br /&gt;
        // set the frame&lt;br /&gt;
        HIViewSetFrame (mhView, &amp;amp;myViewRect);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Controls ===&lt;br /&gt;
&lt;br /&gt;
[FIXME]&lt;br /&gt;
&lt;br /&gt;
Example : HICombobox&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; code located in vcl/aqua/source/gdi/salnativewidgets.cxx  , where all NWF are defined &lt;br /&gt;
&lt;br /&gt;
1) declare CTRL_COMBOBOX control as &amp;quot;true&amp;quot; in isNativeControlSupported() &lt;br /&gt;
&lt;br /&gt;
2) get the control region in getNativeControlRegion() &lt;br /&gt;
&lt;br /&gt;
3) add CTRL_COMBOBOX case in drawNativeControl()&lt;br /&gt;
&lt;br /&gt;
Code sample for the last part (Warning : not yet working !! ) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 switch( nType )&lt;br /&gt;
    {&lt;br /&gt;
            &lt;br /&gt;
        case CTRL_COMBOBOX:&lt;br /&gt;
        if ( ( nPart==PART_BUTTON_DOWN) ||  (nPart==PART_SUB_EDIT) || (nPart==PART_ENTIRE_CONTROL) || (nPart==HAS_BACKGROUND_TEXTURE))&lt;br /&gt;
&lt;br /&gt;
        .... (other code ) &lt;br /&gt;
&lt;br /&gt;
                if( BeginGraphics() )&lt;br /&gt;
                {&lt;br /&gt;
                    HIViewRef myCombo;&lt;br /&gt;
                    &lt;br /&gt;
                    HIRect rc2;&lt;br /&gt;
                    &lt;br /&gt;
                    rc2.origin.x = rControlRegion.GetBoundRect().Left();&lt;br /&gt;
                    rc2.origin.y = rControlRegion.GetBoundRect().Top();&lt;br /&gt;
                    rc2.size.width = rControlRegion.GetBoundRect().GetWidth();&lt;br /&gt;
                    rc2.size.height = rControlRegion.GetBoundRect().GetHeight();&lt;br /&gt;
&lt;br /&gt;
                    HIComboBoxCreate ( &amp;amp;rc2 , NULL, NULL, NULL, kHIComboBoxStandardAttributes, &amp;amp;myCombo);&lt;br /&gt;
                    HIViewSetVisible ( myCombo, true);&lt;br /&gt;
                    HIViewAddSubview (mrView, myCombo); &lt;br /&gt;
                    HIViewSetNeedsDisplay (myCombo, true);&lt;br /&gt;
                    					&lt;br /&gt;
                    EndGraphics();&lt;br /&gt;
                    return true;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
      .....  (other code )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usefull Links ==  &lt;br /&gt;
&lt;br /&gt;
=== References ===&lt;br /&gt;
&lt;br /&gt;
[[http://developer.apple.com/documentation/Carbon/Conceptual/HandlingWindowsControls/hitb-wind_cont_tasks/chapter_3_section_9.html Introducing HIView]]&lt;br /&gt;
&lt;br /&gt;
OverView : [[http://developer.apple.com/carbon/HIToolbox_feature.html HIToolbox]] &lt;br /&gt;
&lt;br /&gt;
HIVIew  : [[http://developer.apple.com/documentation/Carbon/Reference/HIViewReference/Reference/reference.html reference]] [[http://developer.apple.com/documentation/Carbon/Reference/HIViewReference/HIViewReference.pdf or .pdf format]]&lt;br /&gt;
&lt;br /&gt;
[[http://developer.apple.com/documentation/Carbon/Conceptual/Upgrading_HIToolbox/index.html Upgrading to HIToolbox]]&lt;br /&gt;
&lt;br /&gt;
===Code sample ===&lt;br /&gt;
&lt;br /&gt;
Build a big toy with all controls included : [http://developer.apple.com/samplecode/AppearanceSampleUpdated/listing575.html All controls + code around]&lt;br /&gt;
&lt;br /&gt;
High Level Toolbox, HIServices Release Notes : [http://developer.apple.com/releasenotes/Carbon/RN-HIToolbox/ HIToolbox]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Porting]]&lt;br /&gt;
[[Category:MacOSX]]&lt;br /&gt;
[[Category:Aqua]]&lt;/div&gt;</summary>
		<author><name>Plipli</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Mac_OS_X_Implementing_HIView&amp;diff=27897</id>
		<title>Mac OS X Implementing HIView</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Mac_OS_X_Implementing_HIView&amp;diff=27897"/>
		<updated>2007-03-13T21:08:16Z</updated>

		<summary type="html">&lt;p&gt;Plipli: /* Technical principles */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Contributors ==&lt;br /&gt;
&lt;br /&gt;
Eric Bachard[[http://wiki.services.openoffice.org/wiki/User:Ericb ericb]]&lt;br /&gt;
&lt;br /&gt;
Sébastien Plisson [[http://wiki.services.openoffice.org/wiki/User:Plipli plipli]]&lt;br /&gt;
&lt;br /&gt;
== Introduction == &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[DRAFT]  : means,  not yet working, work in progress ... &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
HIObject is a common base class for all user interface objects and all menus, windows, controls, toolbars, and so on, are subclasses of HIObject.&lt;br /&gt;
&lt;br /&gt;
HIView is an object-oriented view system subclassed from HIObject. All controls are implemented as HIView objects (&amp;quot;views&amp;quot;). You can easily subclass HIView classes, making it easy to implement custom controls. Over time the HIView API will replace the current Control Manager. See [[http://developer.apple.com/documentation/Carbon/Conceptual/HandlingWindowsControls/hitb-wind_cont_tasks/chapter_3_section_9.html HIView intro]]&lt;br /&gt;
&lt;br /&gt;
The main idea behind HIView is to superpose plans, to create any view, using compositing possibilities of Quartz Graphical Engine. &lt;br /&gt;
&lt;br /&gt;
The final result is the superposition of all plans, following simple rules like :&lt;br /&gt;
&lt;br /&gt;
 - The last plan is always drawn on the previous one ;&lt;br /&gt;
 - Some plans can  be declared visible, or not, very easely.&lt;br /&gt;
&lt;br /&gt;
This page is part of [[http://wiki.services.openoffice.org/wiki/Mac_OS_X_Porting_-_Native_Controls Native Controls Implementation]] and the objective is to use HIView for HIComboboxes or other HI*  controls. &lt;br /&gt;
&lt;br /&gt;
Our objective is to bind vcl controls with HI* controls, from Carbon API. &lt;br /&gt;
&lt;br /&gt;
e.g.  :  implement HICombobox as one control only.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The generic implementation, under tests (and not fully working), uses : &lt;br /&gt;
&lt;br /&gt;
HI* events definitions in aquavclevents.hxx &lt;br /&gt;
&lt;br /&gt;
Event handler implementation in HandleHIViewEvent()&lt;br /&gt;
&lt;br /&gt;
The use of HandleHIViewEvent() in AquaSalFrame::CreateNewSystemWindow()&lt;br /&gt;
&lt;br /&gt;
The use of HI* controls, in vcl, when ::CreateNewSystemWindow() is used, calling HandleHIViewEvent(), when HI* events are detected in the frame.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note : we &amp;quot;or&amp;quot;- ed kWindowCompositingAttribute in nWindowAttributes, to see compositing effects. &lt;br /&gt;
[FIXME] : investigate, because use this attribute causes refresh issues&lt;br /&gt;
&lt;br /&gt;
== Technical principles ==&lt;br /&gt;
&lt;br /&gt;
(plipli-&amp;gt;ericb:to correct, if I m wrong...)&lt;br /&gt;
&lt;br /&gt;
1) OO ask to VCL / native implementation code to draw controls (ie DrawNativeControl) or images or text&lt;br /&gt;
&lt;br /&gt;
2) For controls, native implementation code create objects but do not draw them&lt;br /&gt;
For images and text, native code draw objects to context (from QDBegin) or context from HiView event&lt;br /&gt;
&lt;br /&gt;
3) When HIView events are received by event handler, especially kEventControlDraw, native code should draw controls to context given by the event&lt;br /&gt;
&lt;br /&gt;
4) Native code call needsDisplay functions to tell Quartz which zone to update&lt;br /&gt;
&lt;br /&gt;
== Current code implementation==&lt;br /&gt;
&lt;br /&gt;
===Events for HIView ===&lt;br /&gt;
&lt;br /&gt;
Two sorts of events are needed: &lt;br /&gt;
&lt;br /&gt;
*for objects (ClasskEventClassHIObject )  :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;kEventHIObjectConstruct&lt;br /&gt;
&lt;br /&gt;
kEventHIObjectInitialize&lt;br /&gt;
&lt;br /&gt;
kEventHIObjectDestruct&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*for controls themselves ( Class kEventClassControl ) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;kEventControlDraw &lt;br /&gt;
&lt;br /&gt;
kEventControlInitialize&lt;br /&gt;
&lt;br /&gt;
kEventControlHitTest&lt;br /&gt;
&lt;br /&gt;
kEventControlGetPartRegion&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Current implementation : see vcl/aqua/aquavclevents.hxx for more informations about the syntax.&lt;br /&gt;
&lt;br /&gt;
===Install Event Handler ===&lt;br /&gt;
&lt;br /&gt;
Now we have to install event Handler, inside AquaSalFrame::CreateNewSystemWindow() :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
InstallEventHandler (&lt;br /&gt;
                           GetControlEventTarget (mhView),&lt;br /&gt;
                           NewEventHandlerUPP (HandleHIViewEvent),&lt;br /&gt;
                           GetEventTypeCount (cHIViewEvent),&lt;br /&gt;
                           cHIViewEvent,&lt;br /&gt;
                           (void*)mhView, // note the use of the pointer &lt;br /&gt;
                           NULL&lt;br /&gt;
                           );&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== The HI* Event Handler ===&lt;br /&gt;
&lt;br /&gt;
The Handler is OSStatus type, and is used when events are detected.&lt;br /&gt;
&lt;br /&gt;
e.g.  : we created HandleHIViewEvent() &lt;br /&gt;
&lt;br /&gt;
using GetEventParameter, itself using the parameters described in Apple documentation. &lt;br /&gt;
&lt;br /&gt;
Code sample :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
OSStatus HandleHIViewEvent(EventHandlerCallRef inHandlerCallRef, EventRef inEvent, void* inUserData)&lt;br /&gt;
{ &lt;br /&gt;
    //lock&lt;br /&gt;
    ImplSalYieldMutexAcquire();&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    OSStatus status = noErr;&lt;br /&gt;
    &lt;br /&gt;
    // we use mrContext, global and seen from everywhere &lt;br /&gt;
    CGContextRef mrContext; &lt;br /&gt;
    &lt;br /&gt;
    // create HIRect, contianing the control bounds ( in local coordinates) &lt;br /&gt;
    HIRect bounds;  &lt;br /&gt;
&lt;br /&gt;
    status = GetEventParameter (inEvent, &lt;br /&gt;
                                kEventParamCGContextRef, &lt;br /&gt;
                                typeCGContextRef, &lt;br /&gt;
                                NULL, &lt;br /&gt;
                                sizeof (CGContextRef), &lt;br /&gt;
                                NULL, &lt;br /&gt;
                                &amp;amp;mrContext); &lt;br /&gt;
&lt;br /&gt;
    // not used, but usefull&lt;br /&gt;
    //require_noerr(status, CantGetGraphicsContext); // 2&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
    // We need to know the bounds containing the current control &lt;br /&gt;
    HIViewGetBounds ((HIViewRef) inUserData, &amp;amp;bounds); &lt;br /&gt;
&lt;br /&gt;
    // not used, but usefull&lt;br /&gt;
    //require_noerr(status, CantGetBoundingRectangle);&lt;br /&gt;
&lt;br /&gt;
    // unlock &lt;br /&gt;
    ImplSalYieldMutexRelease();&lt;br /&gt;
    &lt;br /&gt;
    return status;  &lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===HIView use in AquaSalFrame::CreateNewSystemWindow()  ===&lt;br /&gt;
&lt;br /&gt;
Code sample : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    //  TEST HIVIew part &lt;br /&gt;
    // Set mhView with HIView Content ViewRef&lt;br /&gt;
  &lt;br /&gt;
        HIRect myViewRect;&lt;br /&gt;
        myViewRect.origin.x = aContentRect.left; &lt;br /&gt;
        myViewRect.origin.y = aContentRect.right; &lt;br /&gt;
        myViewRect.size.width = aContentRect.right-aContentRect.left; &lt;br /&gt;
        myViewRect.size.height = aContentRect.bottom-aContentRect.top; &lt;br /&gt;
        OSStatus errval;&lt;br /&gt;
        errval = HIViewFindByID(HIViewGetRoot(mrWindow), kHIViewWindowContentID, &amp;amp;mhView); &lt;br /&gt;
&lt;br /&gt;
        // make the view visible                        &lt;br /&gt;
        HIViewSetVisible (mhView, true); &lt;br /&gt;
        &lt;br /&gt;
        // set the frame&lt;br /&gt;
        HIViewSetFrame (mhView, &amp;amp;myViewRect);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Controls ===&lt;br /&gt;
&lt;br /&gt;
[FIXME]&lt;br /&gt;
&lt;br /&gt;
Example : HICombobox&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; code located in vcl/aqua/source/gdi/salnativewidgets.cxx  , where all NWF are defined &lt;br /&gt;
&lt;br /&gt;
1) declare CTRL_COMBOBOX control as &amp;quot;true&amp;quot; in isNativeControlSupported() &lt;br /&gt;
&lt;br /&gt;
2) get the control region in getNativeControlRegion() &lt;br /&gt;
&lt;br /&gt;
3) add CTRL_COMBOBOX case in drawNativeControl()&lt;br /&gt;
&lt;br /&gt;
Code sample for the last part (Warning : not yet working !! ) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 switch( nType )&lt;br /&gt;
    {&lt;br /&gt;
            &lt;br /&gt;
        case CTRL_COMBOBOX:&lt;br /&gt;
        if ( ( nPart==PART_BUTTON_DOWN) ||  (nPart==PART_SUB_EDIT) || (nPart==PART_ENTIRE_CONTROL) || (nPart==HAS_BACKGROUND_TEXTURE))&lt;br /&gt;
&lt;br /&gt;
        .... (other code ) &lt;br /&gt;
&lt;br /&gt;
                if( BeginGraphics() )&lt;br /&gt;
                {&lt;br /&gt;
                    HIViewRef myCombo;&lt;br /&gt;
                    &lt;br /&gt;
                    HIRect rc2;&lt;br /&gt;
                    &lt;br /&gt;
                    rc2.origin.x = rControlRegion.GetBoundRect().Left();&lt;br /&gt;
                    rc2.origin.y = rControlRegion.GetBoundRect().Top();&lt;br /&gt;
                    rc2.size.width = rControlRegion.GetBoundRect().GetWidth();&lt;br /&gt;
                    rc2.size.height = rControlRegion.GetBoundRect().GetHeight();&lt;br /&gt;
&lt;br /&gt;
                    HIComboBoxCreate ( &amp;amp;rc2 , NULL, NULL, NULL, kHIComboBoxStandardAttributes, &amp;amp;myCombo);&lt;br /&gt;
                    HIViewSetVisible ( myCombo, true);&lt;br /&gt;
                    HIViewAddSubview (mrView, myCombo); &lt;br /&gt;
                    HIViewSetNeedsDisplay (myCombo, true);&lt;br /&gt;
                    					&lt;br /&gt;
                    EndGraphics();&lt;br /&gt;
                    return true;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
      .....  (other code )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usefull Links ==  &lt;br /&gt;
&lt;br /&gt;
=== References ===&lt;br /&gt;
&lt;br /&gt;
[[http://developer.apple.com/documentation/Carbon/Conceptual/HandlingWindowsControls/hitb-wind_cont_tasks/chapter_3_section_9.html Introducing HIView]]&lt;br /&gt;
&lt;br /&gt;
OverView : [[http://developer.apple.com/carbon/HIToolbox_feature.html HIToolbox]] &lt;br /&gt;
&lt;br /&gt;
HIVIew  : [[http://developer.apple.com/documentation/Carbon/Reference/HIViewReference/Reference/reference.html reference]] [[http://developer.apple.com/documentation/Carbon/Reference/HIViewReference/HIViewReference.pdf or .pdf format]]&lt;br /&gt;
&lt;br /&gt;
[[http://developer.apple.com/documentation/Carbon/Conceptual/Upgrading_HIToolbox/index.html Upgrading to HIToolbox]]&lt;br /&gt;
&lt;br /&gt;
===Code sample ===&lt;br /&gt;
&lt;br /&gt;
High Level Toolbox, HIServices Release Notes : http://developer.apple.com/releasenotes/Carbon/RN-HIToolbox/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Porting]]&lt;br /&gt;
[[Category:MacOSX]]&lt;br /&gt;
[[Category:Aqua]]&lt;/div&gt;</summary>
		<author><name>Plipli</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Mac_OS_X_Implementing_HIView&amp;diff=27896</id>
		<title>Mac OS X Implementing HIView</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Mac_OS_X_Implementing_HIView&amp;diff=27896"/>
		<updated>2007-03-13T21:04:42Z</updated>

		<summary type="html">&lt;p&gt;Plipli: /* Current code implementation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Contributors ==&lt;br /&gt;
&lt;br /&gt;
Eric Bachard[[http://wiki.services.openoffice.org/wiki/User:Ericb ericb]]&lt;br /&gt;
&lt;br /&gt;
Sébastien Plisson [[http://wiki.services.openoffice.org/wiki/User:Plipli plipli]]&lt;br /&gt;
&lt;br /&gt;
== Introduction == &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[DRAFT]  : means,  not yet working, work in progress ... &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
HIObject is a common base class for all user interface objects and all menus, windows, controls, toolbars, and so on, are subclasses of HIObject.&lt;br /&gt;
&lt;br /&gt;
HIView is an object-oriented view system subclassed from HIObject. All controls are implemented as HIView objects (&amp;quot;views&amp;quot;). You can easily subclass HIView classes, making it easy to implement custom controls. Over time the HIView API will replace the current Control Manager. See [[http://developer.apple.com/documentation/Carbon/Conceptual/HandlingWindowsControls/hitb-wind_cont_tasks/chapter_3_section_9.html HIView intro]]&lt;br /&gt;
&lt;br /&gt;
The main idea behind HIView is to superpose plans, to create any view, using compositing possibilities of Quartz Graphical Engine. &lt;br /&gt;
&lt;br /&gt;
The final result is the superposition of all plans, following simple rules like :&lt;br /&gt;
&lt;br /&gt;
 - The last plan is always drawn on the previous one ;&lt;br /&gt;
 - Some plans can  be declared visible, or not, very easely.&lt;br /&gt;
&lt;br /&gt;
This page is part of [[http://wiki.services.openoffice.org/wiki/Mac_OS_X_Porting_-_Native_Controls Native Controls Implementation]] and the objective is to use HIView for HIComboboxes or other HI*  controls. &lt;br /&gt;
&lt;br /&gt;
Our objective is to bind vcl controls with HI* controls, from Carbon API. &lt;br /&gt;
&lt;br /&gt;
e.g.  :  implement HICombobox as one control only.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The generic implementation, under tests (and not fully working), uses : &lt;br /&gt;
&lt;br /&gt;
HI* events definitions in aquavclevents.hxx &lt;br /&gt;
&lt;br /&gt;
Event handler implementation in HandleHIViewEvent()&lt;br /&gt;
&lt;br /&gt;
The use of HandleHIViewEvent() in AquaSalFrame::CreateNewSystemWindow()&lt;br /&gt;
&lt;br /&gt;
The use of HI* controls, in vcl, when ::CreateNewSystemWindow() is used, calling HandleHIViewEvent(), when HI* events are detected in the frame.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note : we &amp;quot;or&amp;quot;- ed kWindowCompositingAttribute in nWindowAttributes, to see compositing effects. &lt;br /&gt;
[FIXME] : investigate, because use this attribute causes refresh issues&lt;br /&gt;
&lt;br /&gt;
== Technical principles ==&lt;br /&gt;
(to correct, if I m wrong...)&lt;br /&gt;
&lt;br /&gt;
1) OO ask to VCL / native implementation code to draw controls (ie DrawNativeControl) or images or text&lt;br /&gt;
&lt;br /&gt;
2) For controls, native implementation code create objects but do not draw them&lt;br /&gt;
For images and text, native code draw objects to context (from QDBegin) or contect from HiView event&lt;br /&gt;
&lt;br /&gt;
3) When HIView events are received by event handler, especially kEventControlDraw, native code should draw controls to context given by the event&lt;br /&gt;
&lt;br /&gt;
4) Native code call needsDisplay functions to tell Quatrz which zone to update&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Current code implementation==&lt;br /&gt;
&lt;br /&gt;
===Events for HIView ===&lt;br /&gt;
&lt;br /&gt;
Two sorts of events are needed: &lt;br /&gt;
&lt;br /&gt;
*for objects (ClasskEventClassHIObject )  :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;kEventHIObjectConstruct&lt;br /&gt;
&lt;br /&gt;
kEventHIObjectInitialize&lt;br /&gt;
&lt;br /&gt;
kEventHIObjectDestruct&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*for controls themselves ( Class kEventClassControl ) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;kEventControlDraw &lt;br /&gt;
&lt;br /&gt;
kEventControlInitialize&lt;br /&gt;
&lt;br /&gt;
kEventControlHitTest&lt;br /&gt;
&lt;br /&gt;
kEventControlGetPartRegion&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Current implementation : see vcl/aqua/aquavclevents.hxx for more informations about the syntax.&lt;br /&gt;
&lt;br /&gt;
===Install Event Handler ===&lt;br /&gt;
&lt;br /&gt;
Now we have to install event Handler, inside AquaSalFrame::CreateNewSystemWindow() :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
InstallEventHandler (&lt;br /&gt;
                           GetControlEventTarget (mhView),&lt;br /&gt;
                           NewEventHandlerUPP (HandleHIViewEvent),&lt;br /&gt;
                           GetEventTypeCount (cHIViewEvent),&lt;br /&gt;
                           cHIViewEvent,&lt;br /&gt;
                           (void*)mhView, // note the use of the pointer &lt;br /&gt;
                           NULL&lt;br /&gt;
                           );&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== The HI* Event Handler ===&lt;br /&gt;
&lt;br /&gt;
The Handler is OSStatus type, and is used when events are detected.&lt;br /&gt;
&lt;br /&gt;
e.g.  : we created HandleHIViewEvent() &lt;br /&gt;
&lt;br /&gt;
using GetEventParameter, itself using the parameters described in Apple documentation. &lt;br /&gt;
&lt;br /&gt;
Code sample :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
OSStatus HandleHIViewEvent(EventHandlerCallRef inHandlerCallRef, EventRef inEvent, void* inUserData)&lt;br /&gt;
{ &lt;br /&gt;
    //lock&lt;br /&gt;
    ImplSalYieldMutexAcquire();&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    OSStatus status = noErr;&lt;br /&gt;
    &lt;br /&gt;
    // we use mrContext, global and seen from everywhere &lt;br /&gt;
    CGContextRef mrContext; &lt;br /&gt;
    &lt;br /&gt;
    // create HIRect, contianing the control bounds ( in local coordinates) &lt;br /&gt;
    HIRect bounds;  &lt;br /&gt;
&lt;br /&gt;
    status = GetEventParameter (inEvent, &lt;br /&gt;
                                kEventParamCGContextRef, &lt;br /&gt;
                                typeCGContextRef, &lt;br /&gt;
                                NULL, &lt;br /&gt;
                                sizeof (CGContextRef), &lt;br /&gt;
                                NULL, &lt;br /&gt;
                                &amp;amp;mrContext); &lt;br /&gt;
&lt;br /&gt;
    // not used, but usefull&lt;br /&gt;
    //require_noerr(status, CantGetGraphicsContext); // 2&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
    // We need to know the bounds containing the current control &lt;br /&gt;
    HIViewGetBounds ((HIViewRef) inUserData, &amp;amp;bounds); &lt;br /&gt;
&lt;br /&gt;
    // not used, but usefull&lt;br /&gt;
    //require_noerr(status, CantGetBoundingRectangle);&lt;br /&gt;
&lt;br /&gt;
    // unlock &lt;br /&gt;
    ImplSalYieldMutexRelease();&lt;br /&gt;
    &lt;br /&gt;
    return status;  &lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===HIView use in AquaSalFrame::CreateNewSystemWindow()  ===&lt;br /&gt;
&lt;br /&gt;
Code sample : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    //  TEST HIVIew part &lt;br /&gt;
    // Set mhView with HIView Content ViewRef&lt;br /&gt;
  &lt;br /&gt;
        HIRect myViewRect;&lt;br /&gt;
        myViewRect.origin.x = aContentRect.left; &lt;br /&gt;
        myViewRect.origin.y = aContentRect.right; &lt;br /&gt;
        myViewRect.size.width = aContentRect.right-aContentRect.left; &lt;br /&gt;
        myViewRect.size.height = aContentRect.bottom-aContentRect.top; &lt;br /&gt;
        OSStatus errval;&lt;br /&gt;
        errval = HIViewFindByID(HIViewGetRoot(mrWindow), kHIViewWindowContentID, &amp;amp;mhView); &lt;br /&gt;
&lt;br /&gt;
        // make the view visible                        &lt;br /&gt;
        HIViewSetVisible (mhView, true); &lt;br /&gt;
        &lt;br /&gt;
        // set the frame&lt;br /&gt;
        HIViewSetFrame (mhView, &amp;amp;myViewRect);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Controls ===&lt;br /&gt;
&lt;br /&gt;
[FIXME]&lt;br /&gt;
&lt;br /&gt;
Example : HICombobox&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; code located in vcl/aqua/source/gdi/salnativewidgets.cxx  , where all NWF are defined &lt;br /&gt;
&lt;br /&gt;
1) declare CTRL_COMBOBOX control as &amp;quot;true&amp;quot; in isNativeControlSupported() &lt;br /&gt;
&lt;br /&gt;
2) get the control region in getNativeControlRegion() &lt;br /&gt;
&lt;br /&gt;
3) add CTRL_COMBOBOX case in drawNativeControl()&lt;br /&gt;
&lt;br /&gt;
Code sample for the last part (Warning : not yet working !! ) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 switch( nType )&lt;br /&gt;
    {&lt;br /&gt;
            &lt;br /&gt;
        case CTRL_COMBOBOX:&lt;br /&gt;
        if ( ( nPart==PART_BUTTON_DOWN) ||  (nPart==PART_SUB_EDIT) || (nPart==PART_ENTIRE_CONTROL) || (nPart==HAS_BACKGROUND_TEXTURE))&lt;br /&gt;
&lt;br /&gt;
        .... (other code ) &lt;br /&gt;
&lt;br /&gt;
                if( BeginGraphics() )&lt;br /&gt;
                {&lt;br /&gt;
                    HIViewRef myCombo;&lt;br /&gt;
                    &lt;br /&gt;
                    HIRect rc2;&lt;br /&gt;
                    &lt;br /&gt;
                    rc2.origin.x = rControlRegion.GetBoundRect().Left();&lt;br /&gt;
                    rc2.origin.y = rControlRegion.GetBoundRect().Top();&lt;br /&gt;
                    rc2.size.width = rControlRegion.GetBoundRect().GetWidth();&lt;br /&gt;
                    rc2.size.height = rControlRegion.GetBoundRect().GetHeight();&lt;br /&gt;
&lt;br /&gt;
                    HIComboBoxCreate ( &amp;amp;rc2 , NULL, NULL, NULL, kHIComboBoxStandardAttributes, &amp;amp;myCombo);&lt;br /&gt;
                    HIViewSetVisible ( myCombo, true);&lt;br /&gt;
                    HIViewAddSubview (mrView, myCombo); &lt;br /&gt;
                    HIViewSetNeedsDisplay (myCombo, true);&lt;br /&gt;
                    					&lt;br /&gt;
                    EndGraphics();&lt;br /&gt;
                    return true;&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
      .....  (other code )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Usefull Links ==  &lt;br /&gt;
&lt;br /&gt;
=== References ===&lt;br /&gt;
&lt;br /&gt;
[[http://developer.apple.com/documentation/Carbon/Conceptual/HandlingWindowsControls/hitb-wind_cont_tasks/chapter_3_section_9.html Introducing HIView]]&lt;br /&gt;
&lt;br /&gt;
OverView : [[http://developer.apple.com/carbon/HIToolbox_feature.html HIToolbox]] &lt;br /&gt;
&lt;br /&gt;
HIVIew  : [[http://developer.apple.com/documentation/Carbon/Reference/HIViewReference/Reference/reference.html reference]] [[http://developer.apple.com/documentation/Carbon/Reference/HIViewReference/HIViewReference.pdf or .pdf format]]&lt;br /&gt;
&lt;br /&gt;
[[http://developer.apple.com/documentation/Carbon/Conceptual/Upgrading_HIToolbox/index.html Upgrading to HIToolbox]]&lt;br /&gt;
&lt;br /&gt;
===Code sample ===&lt;br /&gt;
&lt;br /&gt;
High Level Toolbox, HIServices Release Notes : http://developer.apple.com/releasenotes/Carbon/RN-HIToolbox/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Porting]]&lt;br /&gt;
[[Category:MacOSX]]&lt;br /&gt;
[[Category:Aqua]]&lt;/div&gt;</summary>
		<author><name>Plipli</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=DomainDeveloper&amp;diff=25695</id>
		<title>DomainDeveloper</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=DomainDeveloper&amp;diff=25695"/>
		<updated>2007-02-22T18:27:38Z</updated>

		<summary type="html">&lt;p&gt;Plipli: /* Developers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A mapping of names to OOo accounts.&lt;br /&gt;
&lt;br /&gt;
Abbrev.:&lt;br /&gt;
&lt;br /&gt;
* PL : Project Lead&lt;br /&gt;
* CL : Project Co-Lead&lt;br /&gt;
* CC : Community Council Member&lt;br /&gt;
* ESC : Engineering Steering Committee Member &lt;br /&gt;
* CVS : has write access to the OOo CVS repository&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Developers ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || CVS || @openoffice.org || [[IRC Communication]] || Notes || Affiliation&lt;br /&gt;
|-&lt;br /&gt;
|      ||     ||                 ||          ||       ||  &lt;br /&gt;
|-&lt;br /&gt;
| Volker Ahrendt|| X || va||||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Kai Ahrens|| X || ka || Kai_Ahrens ||PL Graphic Applications||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Gene Anaya||   || ganaya||||||&lt;br /&gt;
|-&lt;br /&gt;
| Joost Andrae|| X || ja||ja||CL qa, release testing en-US builds and releasing builds||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Eric Bachard|| X || ericb||ericb2|| CL porting Mac OSX/Linux PPC port ||French OO.o project&lt;br /&gt;
|-&lt;br /&gt;
| Kai Backman||  || kaib ||KaiB||||&lt;br /&gt;
|-&lt;br /&gt;
| Sascha Ballach|| X || sab||||||&lt;br /&gt;
|-&lt;br /&gt;
| Jayant Balraj Madavi||   || jayant_madavi||aZEN_JM||Connectivity / Database||Novell, Inc.&lt;br /&gt;
|-&lt;br /&gt;
| Jörg Barfurth|| X || jb||JoergB||Configuration Util||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Mathias Bauer|| X || mba||||PL Writer, CL Framework, XML||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Thorsten Behrens|| X || thb||thorsten||vcl/impress/toolkit visionary||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Thomas Benisch|| X || tbe||||Scripting framework||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Stephan Bergmann|| X || sb||||CL UDK||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Andreas Bille|| X || abi||||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Éric Bischoff|| X || ebischoff||ebischoff||KDE A/B driver||Bureau Cornavin&lt;br /&gt;
|-&lt;br /&gt;
| Nick Blievers|| X || nick||||IRIX||&lt;br /&gt;
|-&lt;br /&gt;
| Daniel Boelzle|| X || dbo||||UNO core/bridges/packages||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Oliver Bolte|| X || obo||||RE||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Rafaella Braconi||   || coni||||CL l10n, globalization program manager||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Michael Brauer|| X || mib||||PL XML||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Oliver Braun|| X || obr||obr||System Integration/Accessibility Hacker||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Andreas Bregas|| X || ab||||StarBasic||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Jörg Brunsmann||   || jbrunsmann||||UDK||&lt;br /&gt;
|-&lt;br /&gt;
| Jörg Budischewski||   || jbu||PyUNO hacker||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Peter Burow|| X  || pb||UI||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Aidan Butler||   || aidan||||XML filters||&lt;br /&gt;
|-&lt;br /&gt;
| Giuseppe Castagno || X || beppec56 || beppec56_  or beppe_c || PDF output&lt;br /&gt;
|-&lt;br /&gt;
| [[User:ScottCarr|Scott Carr]] || X  || kcarr||kcarr||PL Documentation||Progbits&lt;br /&gt;
|-&lt;br /&gt;
| Colin Charles||   || drbyte||bytee||Malaysian native-lang project||bytebot.net&lt;br /&gt;
|-&lt;br /&gt;
| Behrend Cornelius|| X || bc||||Wizards||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Michael Cziebalski||   || mci||||||&lt;br /&gt;
|-&lt;br /&gt;
| [[User:pdefilippis|Pierre de Filippis]]|| X || pdefilippis||aliscafo||Mac OSX native porting||&lt;br /&gt;
|-&lt;br /&gt;
| Andrew Dent|| X ||ace_dent||ace_dent||ui/custom_images||&lt;br /&gt;
|-&lt;br /&gt;
| Naren Devaiah||   || ||ndev||Performance||Intel Corporation&lt;br /&gt;
|-&lt;br /&gt;
| Nitin Dongre||   || ||nitin_BITS||||Novell, Inc.(intern)&lt;br /&gt;
|-&lt;br /&gt;
| Radek Doulik||   || radekdoulik||rodo_||Canvas hacker||Novell, Inc.&lt;br /&gt;
|-&lt;br /&gt;
| Carsten Driesner|| X || cd|| cd_oo ||PL Framework||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Herbert Duerr|| X || hdu||hdu_hh||GSL||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Oliver Düsterhoff|| X || od||Writer||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Bernd Eilers|| X || bei||rfc821||EIS||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| René Engelhard|| X || rene||_rene_||config_office, Debian packager||Debian&lt;br /&gt;
|-&lt;br /&gt;
| Andre Fischer|| X || af||||Impress||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Uwe Fischer || || ufi || || || Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Ken Foskey||   || waratah||waratah||config_office/dmake man||slug.org.au&lt;br /&gt;
|-&lt;br /&gt;
| Duncan Foster||   || dfoster||||||&lt;br /&gt;
|-&lt;br /&gt;
| David Fraser||   || davidfraser||davidfraser||South African translations, multilingual builds||translate.org.za&lt;br /&gt;
|-&lt;br /&gt;
| Nils Fuhrmann||   || nf||||Localization||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Martin Gallwey|| X || mtg||marty_||XML/Writer/packaging||&lt;br /&gt;
|-&lt;br /&gt;
| Pierre-Andre Galmes || || pagalmes || pagalmes || Chart2 ||StarXpert&lt;br /&gt;
|-&lt;br /&gt;
| Tony Galmiche|| X || tonygalmiche||||CL FR native-lang project||&lt;br /&gt;
|-&lt;br /&gt;
| Sunil Gandhi||   || ||tyro||||NOSIP&lt;br /&gt;
|-&lt;br /&gt;
| Sophie Gautier|| X || sgauti|| sophi ||PL FR native-lang project, CC ||.&lt;br /&gt;
|-&lt;br /&gt;
| Vladimir Glazounov|| X || vg||||RE||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Laurent Godard || X || laurentgodard || lgodard || CC, PL Extensions, Fr Native-lang Project || inDesko/Nuxeo &lt;br /&gt;
|-&lt;br /&gt;
| Jody Goldberg|| X || jodygoldberg||jody||[[Calc]] spreadsheet-ness||Novell, Inc.&lt;br /&gt;
|-&lt;br /&gt;
| Dirk Grobler|| X || dg||||Database Access||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Sg|Steffen Grund]]|| X || sg|| || NetBeans Integration ||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Bettina Haberer||   || bh||||RFEOwner||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Ingrid Halama|| X || iha||||Chart||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Chris Halls|| X || haggai||haggai||Debian packager&amp;amp;amp;misc. hacker||Credativ Ltd., Debian&lt;br /&gt;
|-&lt;br /&gt;
| Gregor Hartmann|| X || gh|| Lachs ||Testtool||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Bustamam Harun||   || bustamam||||Malaysian stuff||&lt;br /&gt;
|-&lt;br /&gt;
| Kevin Hendricks|| X || khendricks||||PL Lingucomponent, PowerPC||&lt;br /&gt;
|-&lt;br /&gt;
| Con Hennessy||   || cphennessy||cph2 or cph_||hacker &amp;amp;amp; former council person||OpenApp&lt;br /&gt;
|-&lt;br /&gt;
| Ivo Hinkelmann|| X || ihi||ivo||l10n tooling/general/RE||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Eric Hoch|| X || maveric||mav_eric||Mac Porting||&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Lutz_Hoeger|Lutz Hoeger]]|| X || lh ||lutzh||PL [http://ux.openoffice.org User Experience]||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Jan Holešovský|| X || kendy||kendy||KDE integration||Novell, Inc.&lt;br /&gt;
|-&lt;br /&gt;
| Martin Hollmichel|| X || mh||Ratte/Nesshof||Build Maestro, PL External, Tools, Porting, CC||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Karl Hong|| X || khong||||i18n, CJK expert||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Matthias Huetsch|| X || mhu||||Performance/strategy, PL UCB, CC, ESC||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Michael Hönnig|| X || mi||||PL API||&lt;br /&gt;
|-&lt;br /&gt;
| [[User:icobgr|Hristo Hristov]] ||   || icobgr || icobgr || PL Bulgarian native-lang project ||&lt;br /&gt;
|-&lt;br /&gt;
| Sven Jacobi|| X || sj||||Escherwizard||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Jörg Jahnke||   || jj||||Internal tooling||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Christian Jansen||   || cj ||||Menu and Toolbar?||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Ocke Janssen|| X || oj||Base||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Pavel Janík|| X || pjanik||paveljanik||PL Czech native-lang project, CL l10n, CC, ESC, l10n builds||&lt;br /&gt;
|-&lt;br /&gt;
| Berry Jia|| X || berryjia||||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Pascal Junck||   || pjunck||||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| [[User:pj@openoffice.org|Peter Junge]]|| X || pj|| peter13j|| OOo community contact for my Chinese Employer, QA||Beijing Redflag CH2000&lt;br /&gt;
|-&lt;br /&gt;
| Christian Junker||   || Cyb||christianju||API||Trees For Life&lt;br /&gt;
|-&lt;br /&gt;
| Hirano Kazunari||   || khirano||||Japanese||&lt;br /&gt;
|-&lt;br /&gt;
| Dhananjay Keskar|| X || dkeskar ||dkeskar||Performance,Buildbot,cat-herder||Intel Corporation&lt;br /&gt;
|-&lt;br /&gt;
| Robert Kinsella||   || rkinsella||||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Volodymyr Khrystynych||   || volody||||XML Filter||&lt;br /&gt;
|-&lt;br /&gt;
| Matthias Klose||   || doko||doko||Ubuntu, gcc, python packager||Canonical, Inc.&lt;br /&gt;
|-&lt;br /&gt;
| Laszlo Kovacs||   || lkovacs||||Documentation||&lt;br /&gt;
|-&lt;br /&gt;
| Martin Kretzschmar|| X || mkretzschmar||martink||Gnome / Debian||Student&lt;br /&gt;
|-&lt;br /&gt;
| Will Lachance||   || wlach||wlach_||Word Perfect File Filters||Net Integration Technologies, Inc.&lt;br /&gt;
|-&lt;br /&gt;
| Thomas Lange|| X || tl||||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Lars Langhans|| X || lla||||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Hans-Joachim Lankenau|| X || hjs||ause||dmake makefile expert, RE||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Németh László|| X || nemeth||||PL lingucomponent||&lt;br /&gt;
|-&lt;br /&gt;
| Jakob Lechner|| X || jakob_lechner||||Writer||Fabalabs&lt;br /&gt;
|-&lt;br /&gt;
| Michael Leibowitz||  X || mikeleib ||mikeleib||performance||Intel Corporation&lt;br /&gt;
|-&lt;br /&gt;
| Wind Li|| X || windly||||Address books||&lt;br /&gt;
|-&lt;br /&gt;
| Ping Liao||   || pliao||||||&lt;br /&gt;
|-&lt;br /&gt;
| Tor Lillqvist|| X || tml||tml_||||Novell, Inc.&lt;br /&gt;
|-&lt;br /&gt;
| Joachim Lingner|| X || jl||||Java, CLI||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Christian Lippka|| X || cl||ChristianL||Graphic Applications||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Mindy Liu||   || mindyliu||||||&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Dl|Dieter Loeschky]]|| X || dl ||||PL: ODF Toolkit||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Philipp Lohmann|| X || pl||pl_hh||VCL/X11 (GSL) hacker||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Jackson Low|| X || xxjack12xx||||Porting||&lt;br /&gt;
|-&lt;br /&gt;
| Patrick Luby||   || pluby||||Mac||&lt;br /&gt;
|-&lt;br /&gt;
| Prasad Madhav || X || pmadhav || pmadhav || Buildbot || Intern@Intel &lt;br /&gt;
|-&lt;br /&gt;
| Babak Mahbod||   || bmahbod||||||&lt;br /&gt;
|-&lt;br /&gt;
| Martin Maher||   || mmaher||||Writer &amp;amp;amp; Filter chap||&lt;br /&gt;
|-&lt;br /&gt;
| Nakata Maho|| X || maho||_maho_||PL QA, FreeBSD guy||Independent&lt;br /&gt;
|-&lt;br /&gt;
| John Marmion|| X || jmarmion||||||&lt;br /&gt;
|-&lt;br /&gt;
| Andreas Martens|| X || ama||||PL Writer||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| [[User:smsm1|Shaun McDonald]] || X || smsm1 || shaunmcdonald || Mac Port, buildbot MacPort1 || Student&lt;br /&gt;
|-&lt;br /&gt;
| Caolán McNamara|| X || cmc||caolan||CL Writer &amp;amp;amp; Filter man||RedHat, Inc.&lt;br /&gt;
|-&lt;br /&gt;
| Michael Meeks|| X || mmeeks||michael_||ugly hack-er, ESC||Novell, Inc.&lt;br /&gt;
|-&lt;br /&gt;
| Frank Meies|| X || fme||||Writer||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Federico Mena-Quintero||   || federicomena||federico||perfectionist||Novell, Inc.&lt;br /&gt;
|-&lt;br /&gt;
| Ismael Merzaq|| X || isma87||ismael_||Mac OSX native porting||Student&lt;br /&gt;
|-&lt;br /&gt;
| Michael Mi||   || mmi||||||&lt;br /&gt;
|-&lt;br /&gt;
| Björn Milcke|| X || bm||bm_||Chart||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Petr Mladek||   || pmladek||pmladek||SUSE RPMs, ooo-build releases||Novell, Inc.&lt;br /&gt;
|-&lt;br /&gt;
| Cyrille Moureaux|| X || cyrillem||Cyrille||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Mmp|Matthias Müller-Prove]]|| X || mmp|| mprove|| CL [[User Experience]], http://ux.openoffice.org || Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Niklas Nebel|| X || nn||||PL [[Calc]]||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Christoph Neumann|| X || cn||||API tests||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| NicelKM|| X || mnicel||nicel||||Novell, Inc.&lt;br /&gt;
|-&lt;br /&gt;
| Bertram Nolte||   || bnolte||||||&lt;br /&gt;
|-&lt;br /&gt;
| Tomas O&amp;#039;Connor||   || toconnor||||Scripting Framework||&lt;br /&gt;
|-&lt;br /&gt;
| Lars Oppermann|| X || lo||||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Rodrigo Parra Novo|| X || rodarvus||rodarvus||Gnumeric/Abiword OpenDocument Format support and port to Maemo||INdT (Instituto Nokia de Tecnologia)&lt;br /&gt;
|-&lt;br /&gt;
| Edward Peterlin|| X || OPENSTEP||||Mac||&lt;br /&gt;
|-&lt;br /&gt;
| Frank Peters|| X || fpe||||Documentation||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Christof Pintaske|| X || cp||||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Ron Piterman||   || rpiterman||||||&lt;br /&gt;
|-&lt;br /&gt;
| Sebastien Plisson|| X  || plipli||plipli||Developer on Aqua port||OO Aqua Port&lt;br /&gt;
|-&lt;br /&gt;
| Noel Power||   || npower||noelp||VBA Interop, Scripting||Novell, Inc.&lt;br /&gt;
|-&lt;br /&gt;
| Nikolai Pretzell|| X || np || ||Autodoc, code quality||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Volker Quetschke|| X || vq||vq||W32-tcsh/bash build environment and dmake Hacker, ESC||Gravity Waves&lt;br /&gt;
|-&lt;br /&gt;
| Tino Rachui|| X || tra||tinor||GSL/Unix Hacker||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Kr|Kay Ramme]]|| X || kr||||PL UDK||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| [[User:ErAck|Eike Rathke]]|| X || er||erAck||CL [[Calc]], engine; CL i18n; stricken with number formatter||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Michael Rauch|| X || mrauch||||NetBSD||&lt;br /&gt;
|-&lt;br /&gt;
| Jens-Heiner Rechtien|| X || hr||blauwal||RE; OOo SCM (CVS, CWS tooling); Porting; Compilers||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Daniel Rentz|| X || dr||||[[Calc]] Excel filter, UI||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Florian Reuter|| X || flr||||Writer filters||Novell, Inc.&lt;br /&gt;
|-&lt;br /&gt;
| Georg Richter|| X || grichter||georg||Base, native MySQL driver||MySQL AB&lt;br /&gt;
|-&lt;br /&gt;
| G. Roderick Singleton||   || grsingleton||grsingleton||Documentation||pathtech.org&lt;br /&gt;
|-&lt;br /&gt;
| Hennes Rohling|| X || hro||||GSL &amp;amp;amp; Util||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Bibek Sahu||   || Bibek||bibek||Impress pieces||Trees For Life&lt;br /&gt;
|-&lt;br /&gt;
| Andreas Schlüns|| X || as||||Framework||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Ingo Schmidt|| X || is||||(Native) Installation||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Jsc|J&amp;amp;uuml;rgen Schmidt]]|| X || jsc||jsc||PL API, CL Extensions, UNO, SDK||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Stephan Schäfer|| X || ssa||ssa||VCL||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Frank Schönheit|| X || fs||FrankS||Database Access, Forms||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Julian Seward || || sewardj || || valgrind ||&lt;br /&gt;
|-&lt;br /&gt;
| Darragh Sherwin||   || dsherwin||darragh||E-Legislation / E-GovSystems||Propylon&lt;br /&gt;
|-&lt;br /&gt;
| Raul Siddhartha||   || rsiddhartha||raul||GTK File Selector||Novell, Inc.&lt;br /&gt;
|-&lt;br /&gt;
| Sarah Smith||   || ssmith||||||&lt;br /&gt;
|-&lt;br /&gt;
| [[User:mox|Mox Soini]] || X || mox || Moxed || Mac Porting || &lt;br /&gt;
|-&lt;br /&gt;
| Rajesh Sola||   || rajeshsola||sola||misc.||NOSIP&lt;br /&gt;
|-&lt;br /&gt;
| Kai Sommerfeld|| X || kso||||manager &amp;amp;amp; hacker||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Oliver Specht|| X || os||||PL UI||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Jörg Spindler||   || jspindler||||||&lt;br /&gt;
|-&lt;br /&gt;
| Fridrich Štrba|| X || fridrich_strba||Fridrich||Word Perfect Hacker||&lt;br /&gt;
|-&lt;br /&gt;
| Ulf Stroehler||   || us||||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Muthu Subramanian||   || muthusuba||muthusuba||misc.||&lt;br /&gt;
|-&lt;br /&gt;
| Louis Suárez-Potts||   || louis||louis||Community Manager||Collab.net&lt;br /&gt;
|-&lt;br /&gt;
| Claus Sørensen||   || cs||c26n,cHBs,chbs||Danish Localization and Project Management Tool(oopm)||ProFOSS&lt;br /&gt;
|-&lt;br /&gt;
| Stefan Taxhet|| X || st||stx12||CC, interpersonal problem fixer||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Armin Theissen||   || armin||||||&lt;br /&gt;
|-&lt;br /&gt;
| Caio Tiago Oliveira|| X || asrail||asrail||CL QA, release testing pt-BR builds||Independent&lt;br /&gt;
|-&lt;br /&gt;
| Jan Tietjens||   || tietjens||||||&lt;br /&gt;
|-&lt;br /&gt;
| Rüdiger Timm|| X || rt|| rtimm ||RE||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Malte Timmermann|| X || mt||||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Gerhard Tonn||   || tonn||||s390||&lt;br /&gt;
|-&lt;br /&gt;
| Willem van Dorp||   || willem.vandorp||||||&lt;br /&gt;
|-&lt;br /&gt;
| Tom Verbeek|| X || tv||||Wizards, Art team||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Sander Vesik||   || svesik||||||&lt;br /&gt;
|-&lt;br /&gt;
| Daniel Vogelheim|| X || dvo||||XML||&lt;br /&gt;
|-&lt;br /&gt;
| Mikhail Voitenko|| X || mav||Framework||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Robert Vojta|| X || rvojta||rvojta||VBA Interop||&lt;br /&gt;
|-&lt;br /&gt;
| Dirk Völzke|| X || dv||||Installation||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Sparcmoz|Jim Watson]]|| X || sparcmoz|| sparcmoz||GNU Linux sparc porter||clug.org.au&lt;br /&gt;
|-&lt;br /&gt;
| Armin Weiss|| X || aw||||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Dan Williams|| X || fa||dcbw||Mac et. al. hacker||RedHat, Inc.&lt;br /&gt;
|-&lt;br /&gt;
| Stephan Wunderlich|| X || sw||||||&lt;br /&gt;
|-&lt;br /&gt;
| Kohei Yoshida|| X || kohei||kohei_||[[Calc]] hacker, Calc optimization solver developer||SlickEdit, Inc.&lt;br /&gt;
|-&lt;br /&gt;
| George Zahopoulos|| X || georgez||||||&lt;br /&gt;
|-&lt;br /&gt;
| Kurt Zenker|| X || kz||smoketester||RE||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Claudio F Filho||   || filhocf||filhocf||Brazilian portuguese Localization||BrOffice.org&lt;br /&gt;
|-&lt;br /&gt;
| Xiaoyang Yu||   || || ||Disk block reordering||Intel Corporation &lt;br /&gt;
|- &lt;br /&gt;
| Antonio Xu|| X || antoxu || antoxu || Async dialogs, PRC improvements || Intel Corporation&lt;br /&gt;
|-&lt;br /&gt;
| Rail Aliev || X  || rail || rail ||  Ru and Tr NL Co-lead || Infra-Resource &lt;br /&gt;
|-&lt;br /&gt;
| Jeremy Zheng|| X || zhiming || Jeremy || Async dialogs, PRC improvements || Intel Corporation&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Schmidtm|Matthias Schmidt]] ||   || schmidtm || schmidtm || Mac OSX Aqua Port || Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Yuri Dario ||   || ydario || Paperino || OS/2 Port || Serenity Systems intl&lt;br /&gt;
|-&lt;br /&gt;
| Wei Zhao ||   || weiz ||   || Chinese Localization  || Beijing Redflag CH2000&lt;br /&gt;
|-&lt;br /&gt;
| Liu Tao ||   || liutao ||   || PyUNO, Async dialogs|| Beijing Redflag CH2000&lt;br /&gt;
|-&lt;br /&gt;
| JiangChuang ||   || jiangc ||   || || Beijing Redflag CH2000&lt;br /&gt;
|-&lt;br /&gt;
| Lv Xugang ||   || lvxg ||   || || Beijing Redflag CH2000&lt;br /&gt;
|-&lt;br /&gt;
| Chen Jinhong ||   || chainchen ||   || || Beijing Redflag CH2000&lt;br /&gt;
|-&lt;br /&gt;
| Li Yuan ||   || liyuan ||   || PyUNO, Async dialogs || Beijing Redflag CH2000&lt;br /&gt;
|-&lt;br /&gt;
| Wu Yan ||   || youngwoo ||   || || Beijing Redflag CH2000&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== QA Engineers ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name ||CVS||@openoffice.org || [[IRC Communication]] || Interested modules || Notes || Affiliation&lt;br /&gt;
|-&lt;br /&gt;
| Stefan Baltzer||||sba||||writer||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Thorsten Bosbach||X||tbo||||framework, qa/qatesttool||QA Framework / Automation||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Oliver Craemer||X||oc||||[[Calc]]||QA Calc / Automation||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Helge Delfs||X||hde||||writer, qa/qatesttool||QA Writer / Automation||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Fredrik Haegg||X||fha||||draw, impress, qa/qatesttool||QA Graphics / Automation||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Hasan Ilter||||hi||||writer, printing, pdf export||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Michael Rüß||||mru||||writer, word im/export||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Éric Savary||||es||||writer, accessibility||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| [[User:jsi|Joerg Sievers]]||X||jsi||jogi||qa/qatesttool, [[Calc]]||Automation / QA Calc||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Joerg Skottke||X||jsk||skotti||framework, qa/qatesttool||QA Framework / Automation||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Marc Neumann||X||msc||||database, qa/qatesttool||QA Base / Automation||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Chris Lukasiak||||clu||||database||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Frank Stecher||||fst||||[[Calc]]||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Jack Warchold|||| jw||||writer, import/export filters||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Uwe Luebbers||||ul||||framework||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Thorsten Martens||||tm||||framework||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Olaf Felka|||| of||||framework, installation||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Thomas Klarhoefer||||kla||||chart||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Wolfram Garten|||| wg||||draw, impress||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| Christian Guenther||||cgu||||draw, impress||||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Thorsten_Ziehm|Thorsten Ziehm]]||||| thorstenziehm||||||QA lead||Sun Microsystems&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We are tracking pending JCAs in the document [[Pending JCAs]].&lt;br /&gt;
&lt;br /&gt;
== Related Pages ==&lt;br /&gt;
* [[User Experience Community]]&lt;br /&gt;
* A map of OOo developers around the world is available at http://www.frappr.com/ooodev, please add yourself to the map if you&amp;#039;re involved in OOo development. It&amp;#039;s just fun to see who&amp;#039;s where :-)&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Plipli</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Documentation/Building_Guide/Building_on_MacOSX&amp;diff=25265</id>
		<title>Documentation/Building Guide/Building on MacOSX</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Documentation/Building_Guide/Building_on_MacOSX&amp;diff=25265"/>
		<updated>2007-02-15T20:51:36Z</updated>

		<summary type="html">&lt;p&gt;Plipli: /* One-Time preparations and scripts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;&amp;#039;&amp;#039;&amp;#039;This document tries to wrap-up the build process for [[OpenOffice.org]] on MacOS X using the native windowing-toolkit of the platform named Aqua.&amp;#039;&amp;#039;&amp;#039; &amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An important goal is to get the demonstration programs &amp;quot;svdem&amp;quot; up and running. They act as a fairly good starting point to further endeavours, since they are used to test the capabilities of the underlying [[VCL]] layer. If this is achieved, one can build and Install the full-fledged OpenOffice.org Package. The purpose of this document is to describe the cumbersome build process of OpenOffice.org rather than to give a kickstart in the coding involved to get VCL ported to Carbon. A starting point for this is Pierre de Filippis excellent [[Intro To Mac Porting]].&lt;br /&gt;
&lt;br /&gt;
I use the bash shell in all examples, since to my belief users of the C-shell are smart enough to figure out the differences anyway. If you want to dig deeper into the build process, please have a look at the description of the build environment here: [http://tools.openoffice.org/build_env.html Open OfficeBuild Environment].&lt;br /&gt;
&lt;br /&gt;
Many thanks for help and assistance go to Pavel Janik and Eric Bachard.&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Prerequisites&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
This document was derived from the description of the X11 build thanksworthy provided by Eric Hoch in this document: [[MacOSXBuildInstructions]]. Here I like to outline the things you need to build the Aqua Version (besides the OS). &lt;br /&gt;
&lt;br /&gt;
=== Mandatory ===&lt;br /&gt;
&lt;br /&gt;
==== Xcode ====&lt;br /&gt;
&lt;br /&gt;
This is (with GNU cp, soon optional) the only mandatory part to be installed to build Aqua version of OpenOffice.org.&lt;br /&gt;
&lt;br /&gt;
Current verified working version is XCode 2.4.&lt;br /&gt;
&lt;br /&gt;
Xcode 2.2, 2.3 are known to work for Aqua development. If any earlier versions work as well, please add them here.&lt;br /&gt;
&lt;br /&gt;
==== X11SDK  (soon optional) ==== &lt;br /&gt;
&lt;br /&gt;
A dependency for Mozilla plugin needs some prototype defined in some Xllib.h header. &lt;br /&gt;
&lt;br /&gt;
Please note, this dependency is not needed in runtime, but only at buildtime. &lt;br /&gt;
&lt;br /&gt;
X11SDK.pkg archive is located in your Tiger&amp;#039;s DVD, and has to be installed in the case of you&amp;#039;re using Mozilla prebuild archives&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Workaround&amp;#039;&amp;#039;&amp;#039; :  XCode does contain Xlib headers.  Just modify INCLUDE path properly will solve the build issue.&lt;br /&gt;
&lt;br /&gt;
Meant replace ( not existing) &lt;br /&gt;
/usr/X11R6/include&lt;br /&gt;
&lt;br /&gt;
with (existing) : /Developer/SDKs/MacOSX10.4u.sdk/usr/X11R6/include &lt;br /&gt;
&lt;br /&gt;
Doing a symlink between them :&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
If X11 and /or X11SDK is(are) not installed :&lt;br /&gt;
sudo mkdir -p  /usr/X11R6&lt;br /&gt;
&lt;br /&gt;
sudo ln -s /Developer/SDKs/MacOSX10.4u.sdk/usr/X11R6/include  /usr/X11R6/include&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;This issue should be fixed soon.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Strongly recommended ===&lt;br /&gt;
&lt;br /&gt;
==== ccache ====&lt;br /&gt;
If you intend to build several times OpenOffice, you probably can benefit of ccache. ccache will speed up your future builds. The first time you make a build with ccache you won&amp;#039;t notice it, but then the build will go up to five times faster.&lt;br /&gt;
&lt;br /&gt;
You can install it using fink. It is simply named &amp;quot;ccache&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
If you don&amp;#039;t use fink, you can download it and build it yourself using the source provided at http://ccache.samba.org/&lt;br /&gt;
&lt;br /&gt;
Then, in order to use it, you need to change the following environment variables (using bash) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export CC=&amp;quot;ccache gcc&amp;quot;&lt;br /&gt;
export CXX=&amp;quot;ccache g++&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Optional ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Java ====&lt;br /&gt;
&lt;br /&gt;
Normally installed with XCode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== The perl module Archive::Zip ( optional ) ====&lt;br /&gt;
&lt;br /&gt;
Nothing is needed anymore with recent versions of XCode (means : not needed with XCode 2.4 at least).&lt;br /&gt;
&lt;br /&gt;
If you still have issues doing configure because of that, please install Archive::Zip repecting the instructions below :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[bash,N]&lt;br /&gt;
perl -MCPAN -eshell&lt;br /&gt;
install Archive::Zip&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== gpc ( optional) ====&lt;br /&gt;
GPC is available here: ftp://ftp.cs.man.ac.uk/pub/toby/gpc/gpc231.tar.Z&amp;gt;&lt;br /&gt;
Attention: Direct Link to the download but it&amp;#039;s only a few hundred KB.&lt;br /&gt;
Note: You can alternatively use the libart_lgpl library instead of GPC. This requires an additional configure flag (--enable-libart) and a precompiled libart library installed in a standard location, such as /usr/lib.&lt;br /&gt;
&lt;br /&gt;
==== pkg-config (optional) ====&lt;br /&gt;
&lt;br /&gt;
Nothing to install on Aqua build, since --disable-gtk is forced&lt;br /&gt;
&lt;br /&gt;
Called &amp;#039;&amp;#039;pkgconfig&amp;#039;&amp;#039; in Fink.&lt;br /&gt;
&lt;br /&gt;
pkg-config can be found here : http://pkgconfig.freedesktop.org/wiki/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Some Background (what is aquavcl01, EIS)&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
=== EIS ===&lt;br /&gt;
OpenOffice sources are basically kept in the CVS server located at anoncvs.services.openoffice.org. However this repository is managed by a database on top called EIS (Environment Information System) which is used to keep track of Master- and Client Workspaces. Master Workspaces are used to keep track of changes going back of the mainline trunk and undergo extensive QA-cycles. These Master Workspaces are driven to official releases. Child workspaces in contrast are copies of certain Master Workspaces used to develop and test bugfixes and additional functionality. These Child Workspaces are later (hopefully) merged back to mainlain Master Workspaces. The TX20 Report mentioned in the Links section gives a very good overview about the overall process. To learn more about Childworkspaces (CWS) have a look here: [[CWS]]. &lt;br /&gt;
&lt;br /&gt;
Go to EIS http://eis.services.openoffice.org/EIS2/servlet/Logon and Logon as guest/guest to get yourself an impression. You can find information about the different workspaces, their dates and times there. &lt;br /&gt;
&lt;br /&gt;
=== VCL (Visual Class Libraries) ===&lt;br /&gt;
&lt;br /&gt;
Porting OpenOffice.org to a new Windowing Toolkit is mostly porting of the OpenOffice&amp;#039;s VCL Layer (Visual Class Libraries) to the new platforms toolkit. The VCL-Layer is responsible of mapping the OpenOffice Application calls to the windowing toolkit.&lt;br /&gt;
&lt;br /&gt;
The (native) OpenOffice port to MacOSX using the Aqua Windowing Toolkit is developed in a child workspace called &amp;#039;&amp;#039;&amp;#039;aquavcl01&amp;#039;&amp;#039;&amp;#039;. This child workspace consists of the modules (aka subdirs): canvas dtrans extensions freetype padmin scp2 sj2 solenv vcl.&lt;br /&gt;
&lt;br /&gt;
The basic approach to prepare a developer&amp;#039;s client system to successfully build OpenOffice/Aqua is the following:&lt;br /&gt;
&lt;br /&gt;
# checkout a given OpenOffice Milestone.&lt;br /&gt;
# checkout aquavcl01 Child Workspace.&lt;br /&gt;
# merge them together.&lt;br /&gt;
# apply the latest patches.&lt;br /&gt;
&lt;br /&gt;
The last point here is a cumbersome but nevertheless necessary operation, since this porting project is in flux. Thanks to Pavel and many others improvements are happening at tremendous pace at the moment. All of these improvements get distributed as patches/diffs against aquavcl01. Aquavcl01 needs to remain stable all the time, therefore the team needs to work on this patch-by-patch aproach at the moment.&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Getting the code (checkout, merge and patch the puppy)&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
Now let&amp;#039;s have a look what to check-out and where. All these milestone numbers below highly depend on the given point-in-time. The current milestone as of now (February 2nd 2007) is m202. You may change this to your needs. You can find the current milestone of each cws in the EIS database.&lt;br /&gt;
&lt;br /&gt;
You also need to bear in mind that you have to access to the CVS-Server&amp;#039;s default port (2401). If a firewall stop&amp;#039;s you here you have to setup a CVS-Tunnel.&lt;br /&gt;
&lt;br /&gt;
==== create a directory for a given milestone, setup CVS access: ==== &lt;br /&gt;
&amp;lt;code&amp;gt;[bash,N]&lt;br /&gt;
 mkdir src680-m202&lt;br /&gt;
 cd src680-m202&lt;br /&gt;
 &lt;br /&gt;
 export CVSROOT=:pserver:anoncvs@anoncvs.services.openoffice.org:/cvs&lt;br /&gt;
 cvs login&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Please Enter the password &amp;#039;anoncvs&amp;#039;&lt;br /&gt;
&lt;br /&gt;
==== checkout Milestone m202 (1,5 GB): ==== &lt;br /&gt;
&amp;lt;code&amp;gt;[bash,N]&lt;br /&gt;
 cvs -z3 co -r SRC680_m202 OpenOffice2&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Once done, you&amp;#039;ll obtain milestone 202. this not exactly what we want, because all changes concerning aquavcl01 Child workspace are not included. To complete, we need to check aquavcl01 changes.&lt;br /&gt;
&lt;br /&gt;
==== checkout Aquavcl01 (50 MB): ==== &lt;br /&gt;
&lt;br /&gt;
1) First possibility : create a dedicated tree (cool backup )&lt;br /&gt;
&lt;br /&gt;
To check aquavcl01 Child workspace, the most simple is to create aquavcl01 directory, and go inside this dir&lt;br /&gt;
&amp;lt;code&amp;gt;[bash,N]&lt;br /&gt;
 mkdir aquavcl01-src &lt;br /&gt;
 &lt;br /&gt;
 cd aquavcl01-src&lt;br /&gt;
 &amp;lt;/code&amp;gt;&lt;br /&gt;
 (assuming you already did cvs login ..etc )&lt;br /&gt;
&amp;lt;code&amp;gt;[bash,N]&lt;br /&gt;
 cvs -z3 co -r cws_src680_aquavcl01 OpenOffice2&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
 The following modules will be present at the end :&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: lightyellow; border: 1px red dashed; padding: 3px 0 3px 15px;&amp;quot;&amp;gt;&lt;br /&gt;
canvas&lt;br /&gt;
&lt;br /&gt;
extensions&lt;br /&gt;
&lt;br /&gt;
fpicker&lt;br /&gt;
&lt;br /&gt;
padmin&lt;br /&gt;
&lt;br /&gt;
sal&lt;br /&gt;
&lt;br /&gt;
scp2&lt;br /&gt;
&lt;br /&gt;
sfx2&lt;br /&gt;
&lt;br /&gt;
solenv&lt;br /&gt;
&lt;br /&gt;
dtrans&lt;br /&gt;
&lt;br /&gt;
freetype&lt;br /&gt;
&lt;br /&gt;
psprint&lt;br /&gt;
&lt;br /&gt;
sj2&lt;br /&gt;
&lt;br /&gt;
vcl&lt;br /&gt;
&lt;br /&gt;
toolkit&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
All these modules are the ones we modified to create the native version :  they all are tagged &amp;quot;aquavcl01&amp;quot; (see all CVS/Tag files in the tree) and all you have to do is either rename or delete the one located in src680-m202 and replace them with the one located in aquavcl01-src.&lt;br /&gt;
&lt;br /&gt;
e.g.  : canvas in src680-m202 will become canvas_m202 , and then, cp canvas from aquavcl01-src into src-m202&lt;br /&gt;
&lt;br /&gt;
This applies for all the modules listed above.&lt;br /&gt;
&lt;br /&gt;
2) Second possibility : use a little script to extract changes : extract_aquavcl01.sh&lt;br /&gt;
&lt;br /&gt;
This shell script, located in src680-m202 will contain :&lt;br /&gt;
&amp;lt;code&amp;gt;[bash,N]&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
list=&amp;quot;canvas extensions fpicker padmin scp2 sfx2 solenv dtrans freetype psprint sj2 vcl sal toolkit&amp;quot;&lt;br /&gt;
for i in $list ;  do &lt;br /&gt;
   mv $i $i-m202&lt;br /&gt;
   cvs -z3 co -r cws_src680_aquavcl01 $i&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then chmod +x extract_aquavcl01.sh&lt;br /&gt;
&lt;br /&gt;
and run it :&lt;br /&gt;
&lt;br /&gt;
./extract_aquavcl01.sh&lt;br /&gt;
&lt;br /&gt;
When finished, and if no problem occurs, you should have a complete tree.&lt;br /&gt;
&lt;br /&gt;
=== One-Time preparations and scripts ===&lt;br /&gt;
&lt;br /&gt;
OpenOffice building gets configured by the popular open-source configuration-management package &amp;#039;autoconf&amp;#039;. So you can do your beloved &amp;#039;./configure&amp;#039; command, but in our case this is done in the &amp;#039;config_office&amp;#039; subdirectory. To save the configure parameters and use them with different milestones I used to link-in my shellscript to fire up the ./configure line.&lt;br /&gt;
&lt;br /&gt;
My directory-structure looks like this:&lt;br /&gt;
&lt;br /&gt;
 bin/&lt;br /&gt;
 src680-m182/&lt;br /&gt;
 src680-m196/&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Now I go to the &amp;#039;config_office&amp;#039; subdir and link in my startscript:&lt;br /&gt;
&amp;lt;code&amp;gt;[bash,N]&lt;br /&gt;
 cd src680-m202/config_office/&lt;br /&gt;
 ln -s ../../bin/build.sh&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
And this is how &amp;#039;build.sh&amp;#039; looks like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[bash,N]&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 export BASE=`pwd|sed &amp;#039;s/\/config_office//&amp;#039;`&lt;br /&gt;
 export OOVERSION=`echo $BASE|sed &amp;#039;s/^\/.*\///&amp;#039;`&lt;br /&gt;
 echo Building from      : $BASE&lt;br /&gt;
 echo OpenOffice Version : $OOVERSION&lt;br /&gt;
 ./configure \&lt;br /&gt;
 --with-lang=&amp;quot;de en-US&amp;quot; \&lt;br /&gt;
 --with-jdk-home=/Library/Java/Home/ \&lt;br /&gt;
 --with-epm=internal \&lt;br /&gt;
 --disable-mozab \&lt;br /&gt;
 --disable-odk \&lt;br /&gt;
 --disable-pasf \&lt;br /&gt;
 --disable-gtk \&lt;br /&gt;
 --disable-mozilla \&lt;br /&gt;
 --with-build-version=$OOVERSION-`date +%d-%m-%y` \&lt;br /&gt;
 --disable-fontconfig \&lt;br /&gt;
 --disable-neon \&lt;br /&gt;
 --without-nas&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--disable-odk will avoid you to download some windows dll which is not needed for aqua-build.&lt;br /&gt;
&lt;br /&gt;
--disable-pasf : pasf stands for Portable Audio System file. As we want to use system library rather than portable ones, we disabled this. However, at this time not all functionality will be available with pasf disabled. You might willing to use --with-pasf if you want working audio in your build.&lt;br /&gt;
&lt;br /&gt;
--without-nas : nas stands for Network Audio System, it uses X11, if you want to use it in your build, just remove this flag. You will need to install the X11 package provided in your CDs/DVD Mac OS X installation. X11 SDK from xCode tools is not required for build this.&lt;br /&gt;
&lt;br /&gt;
This is allowedly a pretty much limited setup, but my overall goal is to get people to have &amp;#039;svdem&amp;#039; build to start coding rather than to have a production ready build for the final release. Therefore I switched off most of the stuff. How these offical builds are done in the long run is to be decided when we get there.&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;List of Patches for a given Milestone&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
Here is a list of Patches one has to apply against a given Milestone of SRC680 (including CWS aquavcl01). Please keep the older Milestones here, since people are probably still on these Versions.&lt;br /&gt;
                       &lt;br /&gt;
&lt;br /&gt;
 PLEASE NOTE : &amp;#039;&amp;#039;&amp;#039;Current milestone for Aqua build is m202&amp;#039;&amp;#039;&amp;#039;  (older milestones are deprecated)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Milestone || Patch to apply || Status&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039;m202&amp;#039;&amp;#039;&amp;#039;                  || see [[List of Patches requiring testing before for integration]]  || work in progress&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039; (deprecated) m202&amp;#039;&amp;#039;&amp;#039;  || To avoid crashes with several entries in menu  apply [http://eric.bachard.free.fr/patches/aqua/about_workaround/diff_salframe.diff about_workaround patch] in vcl/aqua/source/window  ||Work in progress &lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039; (deprecated) m200&amp;#039;&amp;#039;&amp;#039;  || To avoid crashes with several entries in menu  apply [http://eric.bachard.free.fr/patches/aqua/about_workaround/diff_salframe.diff about_workaround patch] in vcl/aqua/source/window  ||Work in progress &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;List of Patches requiring testing before for integration&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
All patches that developers have that need testing or peer review should be added here.&lt;br /&gt;
&lt;br /&gt;
salatslayout.cxx : new implementation of text layout has to be tested.&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Known build issues&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;(deprecated) m200&amp;#039;&amp;#039;&amp;#039;: Breakage in instsetoo_native &lt;br /&gt;
&lt;br /&gt;
See [http://eric.bachard.free.fr/mac/aquavcl/patches/m200_aquavcl01/instsetoo_native_util_makefile.mk.diff  Fix for instsetoo_native breakage]&lt;br /&gt;
&lt;br /&gt;
how apply the patch ?&lt;br /&gt;
&lt;br /&gt;
Place it in &amp;lt;install_dir&amp;gt;/instsetoo_native/util&lt;br /&gt;
&lt;br /&gt;
type :&lt;br /&gt;
&lt;br /&gt;
patch -p0&amp;lt;instsetoo_native_util_makefile.mk.diff&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
m196:  Breakage in pyuno &lt;br /&gt;
&lt;br /&gt;
See [http://www.openoffice.org/issues/show_bug.cgi?id=72372 pyuno not found]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Workaround&amp;#039;&amp;#039;&amp;#039; :  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1) either use the patch provided in issue 72372&lt;br /&gt;
&lt;br /&gt;
2) or simply do ( in the same terminal, or please source the environment before):&lt;br /&gt;
&lt;br /&gt;
cd bridges &lt;br /&gt;
build &amp;amp;&amp;amp; deliver&lt;br /&gt;
cd ../pyuno&lt;br /&gt;
build &amp;amp;&amp;amp; deliver&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; pyuno should build without any problem&lt;br /&gt;
&lt;br /&gt;
cd .. &amp;amp;&amp;amp; dmake &lt;br /&gt;
&lt;br /&gt;
will complete your build&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[User:Ericb|Ericb]] 14:52, 13 December 2006 (CET)&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Doing the build (about 4,5 GB)&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
Fine, now we have a (hopefully) working &amp;#039;build.sh&amp;#039; in the config_office subdir. We need to run it beforehand:&lt;br /&gt;
&lt;br /&gt;
 cd src680-m202/config_office/&lt;br /&gt;
 ./build.sh&lt;br /&gt;
&lt;br /&gt;
This will setup the necessary includefiles and create a couple of files in the &amp;#039;&amp;#039;&amp;#039;parent&amp;#039;&amp;#039;&amp;#039; directory (bootstrap, MacOSXPPCEnv.Set.sh, MacOSXPPCEnv.Set). If you are using the sh, ksh or bash you only need to take care for &amp;#039;MacOSXPPCEnv.Set.sh&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Now we need to get back to our base-directory, run the bootstrap script, source our Enviroment (MacOSXPPCEnv.Set.sh) and finally start the build-process:&lt;br /&gt;
&lt;br /&gt;
On PowerPC :&lt;br /&gt;
&lt;br /&gt;
 cd ..&lt;br /&gt;
 ./bootstrap&lt;br /&gt;
 source MacOSXPPCEnv.Set.sh&lt;br /&gt;
 time dmake&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Or (on Mac Intel ) : &lt;br /&gt;
&lt;br /&gt;
 cd ..&lt;br /&gt;
 ./bootstrap&lt;br /&gt;
 source MacOSXX86Env.Set.sh&lt;br /&gt;
 time dmake&lt;br /&gt;
&lt;br /&gt;
The main purpose of the &amp;#039;&amp;#039;&amp;#039;boostrap&amp;#039;&amp;#039;&amp;#039; script is to build (if necessary) the dmake utility used. Dmake once was a unix make-clone made by wticorp but got incorporated into OpenOffice since it was orphaned. For more information about dmake, it&amp;#039;s history and manpage have a look here: http://tools.openoffice.org/dmake/index.html&lt;br /&gt;
&lt;br /&gt;
Sourcing MacOSXPPCEnv.Set.sh is very important not only for building but also for &amp;#039;&amp;#039;&amp;#039;running&amp;#039;&amp;#039;&amp;#039; svdem later on. Here all the Environment-Variables for the Build will be set up. For a detailed description see [[Environment_Variables]]. Please note that on Intel machines, &amp;#039;MacOSXPPCEnv.Set&amp;#039; should be substituted with &amp;#039;MacOSXX86Env.Set&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
This Build process takes on my box (Dual 1.8 GHz G5, 1.5GB RAM) roughly 10 hours. Be patient. What can you do meanwhile? Do this:&lt;br /&gt;
&amp;lt;code&amp;gt;[bash,N]&lt;br /&gt;
 while true ; do find . -maxdepth 1 -type d -anewer MacOSXPPCEnv.Set.sh |wc -l ; sleep 5; done&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
and wait till the number reaches 174&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Creating Debug-Versions of Modules&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;pre&amp;gt; Important: a new section about use XCode for OpenOffice.org debug has been created.&lt;br /&gt;
 See :&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[MacOSX_Debug_OpenOffice.org_using_XCode]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Is it possible to build the complete set with symbols included ?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Currently not possible, and not advised.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; is it possible to build some modules with symbols ?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Yes, and that&amp;#039;s the simplest way to proceed. Some modules, like sal and vcl can be rebuilt using debug.&lt;br /&gt;
&lt;br /&gt;
Example :&lt;br /&gt;
&lt;br /&gt;
To rebuild sal with symbols included, do:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[bash,N]&lt;br /&gt;
cd sal&lt;br /&gt;
rm -rf unxmacxp.pro&lt;br /&gt;
build debug=true&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and recopy the libs into the bundle. gdb will display the symbols, and make your life easier.&lt;br /&gt;
&lt;br /&gt;
Note :  debug string is tested, and DEBUG is active when debug string is not empty. So debug=t works too.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; How change gdb options, and use e.g. -g -ggdb or -gdwarf-2  ?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
To rebuild the module, you just have to modify the option in solenv/inc/unxmacx.mk, replacing -g with -ggdb&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Known issues&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 Sometimes a build error, or a runtime error, may be seen in the normal build,  &lt;br /&gt;
 but the error goes away when --enable-debug is used or if the module is compiled with debug=true. &lt;br /&gt;
&lt;br /&gt;
The DEBUG build turns off optimisation, so this is a hint that compiler optimisation causes the error.&lt;br /&gt;
&lt;br /&gt;
The error might be due to incorrect code or a compiler fault.  Such errors might not be seen on all platforms, &lt;br /&gt;
&lt;br /&gt;
and might not be seen in different compiler versions on one platform.&lt;br /&gt;
&lt;br /&gt;
If the code can not be fixed there is a workaround using NOOPTFILES to build specified files with no optimisation.&lt;br /&gt;
 &lt;br /&gt;
Example : &lt;br /&gt;
&lt;br /&gt;
jvmfwk on Mac OS X: build jvmfwk in m183 on Mac OS X Intel leads to Bus Error when javaldx is run.&lt;br /&gt;
&lt;br /&gt;
Solution : use trial and error to rebuild individual files with debug=true. This proves the problem lies with vendorbase.cxx&lt;br /&gt;
&lt;br /&gt;
Have a look in sc/source/core/data/makefile.mk for an example to use NOOPTFILES&lt;br /&gt;
&lt;br /&gt;
To solve our problem: just add : NOOPTFILES= $(SLO)$/vendorbase.obj in the corresponding makefile.&lt;br /&gt;
&lt;br /&gt;
Take care in case some .IF is needed to prevent interference with other platforms.&lt;br /&gt;
&lt;br /&gt;
There&amp;#039;s some additional information around debugging on Christians Page [[User:CL#2006-09-03]]&lt;br /&gt;
&lt;br /&gt;
== Building and running svdem ==&lt;br /&gt;
&lt;br /&gt;
We want to run the demonstration programs called &amp;quot;svdem&amp;quot;. There are a couple of binaries called &amp;quot;svdem&amp;quot;, which area they cover is still somewhat unclear to me, I hope some of you guys can shed some light here. But hey, this is a wiki! Just correct here :-).&lt;br /&gt;
&lt;br /&gt;
==== svdem from VCL ====&lt;br /&gt;
To have the VCL Testprogram build you have to do:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[FIXME] replace this scetion with the same, but about svdem from svtools&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 cd vcl; build --all&lt;br /&gt;
&lt;br /&gt;
This should have created a file called &amp;quot;svdem&amp;quot; here: vcl/unxmacxp.pro/bin/svdem. If you managed to build these binaries, you are nearly there. What you need now, is a wrapper directory structure to make this binary a fellow Mac OSX application. I mean the ones which have this structure:&lt;br /&gt;
&lt;br /&gt;
 svdem.app/&lt;br /&gt;
 svdem.app/Contents&lt;br /&gt;
 svdem.app/Contents/Info.plist&lt;br /&gt;
 svdem.app/Contents/MacOS&lt;br /&gt;
 svdem.app/Contents/MacOS/applicat.rdb&lt;br /&gt;
 svdem.app/Contents/MacOS/svdem&lt;br /&gt;
&lt;br /&gt;
You can basically create this structure anywhere you want. And you can link-in the file you just created (svdem). So you build up this structure once and link-in the freshly created svdem there:&lt;br /&gt;
&lt;br /&gt;
 ls -l svdem applicat.rdb&lt;br /&gt;
 svdem -&amp;gt; /opt/src/openoffice/src680-m202/vcl/unxmacxp.pro/bin/svdem&lt;br /&gt;
 applicat.rdb -&amp;gt; /opt/src/openoffice/src680-m202/vcl/unxmacxp.pro/bin/applicat.rdb&lt;br /&gt;
&lt;br /&gt;
Now only the Info.plist file is missing, so here we go:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[xml,N]&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple Computer//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;dict&amp;gt;&lt;br /&gt;
         &amp;lt;key&amp;gt;CFBundleDevelopmentRegion&amp;lt;/key&amp;gt;&lt;br /&gt;
         &amp;lt;string&amp;gt;English&amp;lt;/string&amp;gt;&lt;br /&gt;
         &amp;lt;key&amp;gt;CFBundleDisplayName&amp;lt;/key&amp;gt;&lt;br /&gt;
         &amp;lt;string&amp;gt;SvDem&amp;lt;/string&amp;gt;&lt;br /&gt;
         &amp;lt;key&amp;gt;CFBundleExecutable&amp;lt;/key&amp;gt;&lt;br /&gt;
         &amp;lt;string&amp;gt;svdem&amp;lt;/string&amp;gt;&lt;br /&gt;
         &amp;lt;key&amp;gt;CFBundleIdentifier&amp;lt;/key&amp;gt;&lt;br /&gt;
         &amp;lt;string&amp;gt;com.yourcompany.svdem&amp;lt;/string&amp;gt;&lt;br /&gt;
         &amp;lt;key&amp;gt;CFBundleInfoDictionaryVersion&amp;lt;/key&amp;gt;&lt;br /&gt;
         &amp;lt;string&amp;gt;6.0&amp;lt;/string&amp;gt;&lt;br /&gt;
         &amp;lt;key&amp;gt;CFBundlePackageType&amp;lt;/key&amp;gt;&lt;br /&gt;
         &amp;lt;string&amp;gt;APPL&amp;lt;/string&amp;gt;&lt;br /&gt;
         &amp;lt;key&amp;gt;CFBundleSignature&amp;lt;/key&amp;gt;&lt;br /&gt;
         &amp;lt;string&amp;gt;????&amp;lt;/string&amp;gt;&lt;br /&gt;
         &amp;lt;key&amp;gt;CFBundleVersion&amp;lt;/key&amp;gt;&lt;br /&gt;
         &amp;lt;string&amp;gt;1.0&amp;lt;/string&amp;gt;&lt;br /&gt;
         &amp;lt;key&amp;gt;LSRequiresCarbon&amp;lt;/key&amp;gt;&lt;br /&gt;
         &amp;lt;true/&amp;gt;&lt;br /&gt;
 &amp;lt;/dict&amp;gt;&lt;br /&gt;
 &amp;lt;/plist&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you created the directory structure properly you can do &amp;#039;./svdem&amp;#039; in the &amp;#039;svdem.app/Contents/MacOS/&amp;#039; directory. You should see the svdem coming up.&lt;br /&gt;
&lt;br /&gt;
==== svdem from svtools ====&lt;br /&gt;
* Copy the application package you created for the vcl svdem.&lt;br /&gt;
* Source your MacOSX[PPC-X86]Env.Set.sh&lt;br /&gt;
* Go into svtools/workben&lt;br /&gt;
* build svdem using dmake in the workben directory&lt;br /&gt;
* link the svdem and applicat.rdb from Contents/MacOS to the ones located in svtools/unxmacxp.pro/bin&lt;br /&gt;
&lt;br /&gt;
You are done : you can now source your environment and run svdem using your usual shell.&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Installing, preparing and running OpenOffice.org&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
Here I like to outline the steps to run OpenOffice.org after a successful build from the sources. Running the native Aqua Version of OpenOffice.org is somewhat tricky at the moment, since the installation procedure and mode are not in their final state. So right now one has to manually do some preparations to run the Office suite. This will change in the future when we are about to release some Alpha Builds to a wider audience.&lt;br /&gt;
&lt;br /&gt;
=== Drag &amp;amp; Drop Install the Application from the Diskimage ===&lt;br /&gt;
&lt;br /&gt;
When you are one of the lucky few (Don&amp;#039;t give up, Eric!), who have a successful build, you are going to see something like this as the last lines of the build:&lt;br /&gt;
&lt;br /&gt;
 .&lt;br /&gt;
 .&lt;br /&gt;
 .&lt;br /&gt;
 ......................................................................................................................................................&lt;br /&gt;
    (CRC32 $11685D33: DiscRecording 3.1.3f2 (Apple_HFS : 2))&lt;br /&gt;
 Ressourcen hinzufügen…&lt;br /&gt;
 ......................................................................................................................................................&lt;br /&gt;
 Dauer: 15.406s&lt;br /&gt;
 Dateigröße: 144732418 Bytes, Prüfsumme: CRC32 $14E0BB67&lt;br /&gt;
 Bearbeitete Sektoren: 773848, 773845 komprimiert&lt;br /&gt;
 Geschwindigkeit: 24.5M Bytes/Sek&lt;br /&gt;
 Ersparnis: 63.5 %&lt;br /&gt;
 created: /opt/src/openoffice/src680-m202/instsetoo_native/unxmacxp.pro/OpenOffice/install/de/OpenOffice.org-2.2_de.dmg&lt;br /&gt;
&lt;br /&gt;
In this final step the &amp;quot;&amp;quot;instsetoo_native&amp;quot;&amp;quot; target creates the install Diskimages using Apple&amp;#039;s &amp;#039;hdiutil&amp;#039;. In my case it gives its output in German. After this disk image(s) have been created, double click the disk image to mount it (or type open &amp;lt;path to the DMG Image&amp;gt;) , and then move the icon named &amp;quot;OpenOffice.org 2.2&amp;quot; to your &amp;#039;&amp;#039;Applications&amp;#039;&amp;#039; folder (or any other folder you want this program to reside). The &amp;quot;OpenOffice.org 2.1&amp;quot; icon shown in the Finder is in fact a subdirectory called &amp;quot;OpenOffice.org 2.2.app&amp;quot;. Subdirectories named &amp;quot;.app&amp;quot; (along with some well-know files inside like Info.plist, etc) are called &amp;#039;&amp;#039;Bundles&amp;#039;&amp;#039; in Apple&amp;#039;s lingo.&lt;br /&gt;
&lt;br /&gt;
=== Prepare the installation ===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Soon optional (tests in progress) &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
After the OpenOffice 2.2 Application has been copied to its destination, you have to go into this bundle and run a small shell script provided by Pavel Janik to prepare soffice.bin (OpenOffice.org launcher) for running. You have to run this script in the directory where a Universal Binary called &amp;quot;droplet&amp;quot; is located. This &amp;quot;droplet&amp;quot; binary was used to fire-off the X11 version of OpenOffice.org. Expect this to change, but as of now we have to do it like this.&lt;br /&gt;
&lt;br /&gt;
I have put my OpenOffice.org build in my home directory&amp;#039;s private &amp;quot;Application&amp;quot; folder (/Users/schmidtm/Applications), so please change this path to your installation. Now go to into the bundle and run the script:&lt;br /&gt;
&lt;br /&gt;
 cd /Users/schmidtm/Applications/OpenOffice.org 2.2.app/Contents/MacOS&lt;br /&gt;
 /opt/src/openoffice/bin/fix_installed_OOo&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[bash,N]&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 [ ! -f droplet ] &amp;amp;&amp;amp; {&lt;br /&gt;
     echo &amp;quot;Please run me in the directory, where binary named droplet is located.&amp;quot;&lt;br /&gt;
     exit 0&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 mv THIRDPARTYLICENSEREADME.html help presets share ..&lt;br /&gt;
 mv droplet droplet.orig&lt;br /&gt;
 mv program/* .&lt;br /&gt;
 rmdir program&lt;br /&gt;
 &lt;br /&gt;
 cd ..&lt;br /&gt;
 ln -sf MacOS program&lt;br /&gt;
 sed &amp;#039;s#droplet#soffice.bin#&amp;#039; Info.plist &amp;gt;Info.plist.new&lt;br /&gt;
 mv Info.plist.new Info.plist&lt;br /&gt;
 cd MacOS&lt;br /&gt;
 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Run the soffice.bin ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We&amp;#039;re nearly through, let&amp;#039;s fire-off the binary:&lt;br /&gt;
&lt;br /&gt;
 AQUA_NATIVE_MENUS=TRUE ./soffice.bin -nofirststartwizard -norestore&lt;br /&gt;
&lt;br /&gt;
Notice the enviroment variable here. AQUA_NATIVE_MENUS is experimental stuff created by Pavel, SAL_NO_NWF was created some times ago, and is located in vcl/source/window/window.cxx . At the moment we have:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Variable || Function&lt;br /&gt;
|-&lt;br /&gt;
| SAL_NO_NWF=TRUE  || disable native controls code&lt;br /&gt;
|-&lt;br /&gt;
| AQUA_NATIVE_MENUS=TRUE || enable experimental native menus code&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Both changes are marked with comments in the source code, and when we remove them in the future, native controls and native menus will be enabled by default.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;HACK&amp;#039;&amp;#039;&amp;#039; : with current code, to enable native menus by defaut without have to define an environment variable, just comment as follow :&lt;br /&gt;
&lt;br /&gt;
in vcl/aqua/source/window/salmenu.cxx, around line 124 :&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 /*&lt;br /&gt;
     static const char *pExperimental = getenv (&amp;quot;AQUA_NATIVE_MENUS&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
     if ( !pExperimental || strcasecmp(pExperimental, &amp;quot;TRUE&amp;quot;) )&lt;br /&gt;
         return FALSE;&lt;br /&gt;
 */&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
&lt;br /&gt;
# Bug Database: http://www.openoffice.org/issues/query.cgi&lt;br /&gt;
# Mailinglist: mac@porting.openoffice.org&lt;br /&gt;
# IRC Meeting-Logs (#ooo_macport@freenode.org): [[Previous_Mac_Meeting_logs]] [[MacOSXPortMeetings]]&lt;br /&gt;
# TX20: http://eric.bachard.free.fr/UTBM_TX20/reports/Carbon_vcl.pdf&lt;br /&gt;
# OpenOffice Source Directory Structure: http://wiki.services.openoffice.org/wiki/Source_code_directories&lt;br /&gt;
# Pavels Patch Wiki: http://blog.janik.cz/&lt;br /&gt;
# Eric Bachard Wiki: http://wiki.services.openoffice.org/wiki/User:Ericb&lt;br /&gt;
# Christian Lippka Wiki: http://wiki.services.openoffice.org/wiki/User:CL&lt;br /&gt;
# Carbon: http://developer.apple.com/carbon&lt;br /&gt;
# EIS: http://eis.services.openoffice.org/EIS2/servlet/Logon&lt;br /&gt;
# Runtime Configuration: http://developer.apple.com/documentation/MacOSX/Conceptual/BPRuntimeConfig/index.html&lt;br /&gt;
# OpenOffice Domain Developer http://wiki.services.openoffice.org/wiki/DomainDeveloper&lt;br /&gt;
&lt;br /&gt;
== Screenshots ==&lt;br /&gt;
&lt;br /&gt;
# Eric Bachard screenshots (some are from Stephan Schaefer) http://eric.bachard.free.fr/mac/aquavcl/screenshots/&lt;br /&gt;
# Most recent: http://eric.bachard.free.fr/mac/aquavcl/screenshots/aqua_menus_05_nov_06/&lt;br /&gt;
# Pavel Janik screenshots http://blog.janik.cz/images/MacOSX/2006-08-10&lt;br /&gt;
# Important screenshot (eventloop issue) : http://blog.janik.cz/images/MacOSX/  =&amp;gt; See : OOoMenus-separator-and-disabled_entries.png&lt;br /&gt;
# Native Menus : http://eric.bachard.free.fr/mac/aquavcl/screenshots/aqua_native_controls_03_11_06/aqua_menus_01.jpg&lt;br /&gt;
&lt;br /&gt;
More menus : http://eric.bachard.free.fr/mac/aquavcl/screenshots/aqua_menus_05_nov_06/index.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:MacOSX]]&lt;br /&gt;
[[Category:Porting]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Aqua]]&lt;/div&gt;</summary>
		<author><name>Plipli</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=User:Ericb&amp;diff=25086</id>
		<title>User:Ericb</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=User:Ericb&amp;diff=25086"/>
		<updated>2007-02-13T14:06:12Z</updated>

		<summary type="html">&lt;p&gt;Plipli: /* &amp;#039;&amp;#039;&amp;#039;Strategy for native port&amp;#039;&amp;#039;&amp;#039; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Public Documentation License Notice==&lt;br /&gt;
&lt;br /&gt;
The contents of this Documentation (excepted Native Port Roadmap),are subject to the Public Documentation License Version 1.0 (the &amp;quot;License&amp;quot;); you may only use this Documentation if you comply with the terms of this License. A copy of the License is available at http://www.openoffice.org/licenses/PDL.html.&lt;br /&gt;
The Original Documentation is &amp;quot;Mac OS X native port&amp;quot;. The Initial Writer of the Original Documentation is (JCA) Eric Bachard (C) 2005-2006. All Rights Reserved. (Initial Writer contact(s): ericb@openoffice.org.)&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Mac OS X Native port&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;messagebox cleanup metadata&amp;quot; style=&amp;quot;border:1px solid blue;background-color:#B3FFF5;padding:7px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;The first Mac OS X native port objective is make OpenOffice.org run without X11 use, to make it a real Mac application.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;The second one is respect Aqua Human interface Guidelines&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; This is a long term work, and every help and/or contributions, like donations** are welcome.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 **see http://contributing.openoffice.org/index.html&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Native Port Roadmap&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;2006&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
* June 2006: work in progress &lt;br /&gt;
&lt;br /&gt;
- Basis: frame, instances, threads, drawing, painting, resizing (Stephan Schaefer, Tino Rachui)&lt;br /&gt;
&lt;br /&gt;
 Done: &lt;br /&gt;
 implement threads&lt;br /&gt;
 create, manage instance&lt;br /&gt;
 create, manage windows (including parents)&lt;br /&gt;
 create, manage events&lt;br /&gt;
 create manage drawing, resizing&lt;br /&gt;
 create, add menus (Pavel Janik)&lt;br /&gt;
 toggle window fullscreen (Pierre de Filippis)&lt;br /&gt;
 make font server work (Stephan Schaefer)&lt;br /&gt;
&lt;br /&gt;
* Current status font support (Stephan Schaefer, 2006/07/28): the following features are basically working now&lt;br /&gt;
** font selection&lt;br /&gt;
** font size&lt;br /&gt;
** simple font attributes (bold, italic)&lt;br /&gt;
&lt;br /&gt;
 Next step: document first part, and propose design&lt;br /&gt;
&lt;br /&gt;
- native filepicker (Pavel Janik, Florian Heckl)&lt;br /&gt;
&lt;br /&gt;
- native printing implementation (Oliver?)&lt;br /&gt;
&lt;br /&gt;
- native font implementation (Eric Bachard)&lt;br /&gt;
&lt;br /&gt;
* September 2006: &lt;br /&gt;
&lt;br /&gt;
- first proofs of concept: fonts, filepicker .. (more?)&lt;br /&gt;
- show the results (OOoCon 2006?)&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;2007&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
* January 2007: first alpha implementation&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Strategy for native port&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Possible Actions&amp;#039;&amp;#039;&amp;#039;: &lt;br /&gt;
&lt;br /&gt;
Identify us:&lt;br /&gt;
&lt;br /&gt;
#Complete the arrays below&lt;br /&gt;
#Update photos on frapr.com?&lt;br /&gt;
&lt;br /&gt;
Share the work:&lt;br /&gt;
&lt;br /&gt;
#Divide the work between little Teams&lt;br /&gt;
#Update Todo list regularly -&amp;gt; needs some love these days ... [http://wiki.services.openoffice.org/wiki/Mac_OS_X_Porting_-_Work_Areas/Todo%27s]&lt;br /&gt;
&lt;br /&gt;
Help:&lt;br /&gt;
&lt;br /&gt;
#Teach tools between us&lt;br /&gt;
#Do a debug party on IRC&lt;br /&gt;
#write documentation&lt;br /&gt;
&lt;br /&gt;
Meet us:&lt;br /&gt;
&lt;br /&gt;
#IRC&lt;br /&gt;
#Mac Meeting (like nov2005 in Hamburg?)&lt;br /&gt;
&lt;br /&gt;
Inform:&lt;br /&gt;
&lt;br /&gt;
#Update website regularly&lt;br /&gt;
#Blogs&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;WHO&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
Mac Team:&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;vertical-align:top; text-align:left; background-color:#efefef;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#d6d6d6;font-weight:bold;&amp;quot; &lt;br /&gt;
|Developer \ skills || build || write code || code review || debug/trace (higher is better) || contribute to documentation ||&lt;br /&gt;
|-&lt;br /&gt;
|ericb|| x || x || || 1 || x ||&lt;br /&gt;
|-&lt;br /&gt;
|pjanik|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|ssa|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|maho|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|tinor|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|schmidtm|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|ebischoff|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|obr|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|cl|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|aliscafo|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|fheckl|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Fridrich|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|plipli|| || x || || || x ||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Other resources&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
fonts: ?&lt;br /&gt;
&lt;br /&gt;
events: ?&lt;br /&gt;
&lt;br /&gt;
QA: ?&lt;br /&gt;
&lt;br /&gt;
graphical: ?&lt;br /&gt;
&lt;br /&gt;
Communication: ?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;WHAT&amp;#039;&amp;#039;&amp;#039;: Status of most important tasks&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;vertical-align:top; text-align:left; background-color:#efefef;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#d6d6d6;font-weight:bold;&amp;quot; &lt;br /&gt;
| Task || Names|| Urgency (1=higher)|| Work in Progress || Done || Code review || Debug || Integration || &lt;br /&gt;
|-&lt;br /&gt;
|Get rid of X11||done || 1 || x || x || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Bundle|| || 1 || x || || || || | ||&lt;br /&gt;
|-&lt;br /&gt;
|Drawing|| || 1 || x || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Fonts||plipli || 1 || x || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Events management|| || 2 || x || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Controls (see list) ||ericb, aliscafo || 2 || x || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Native FilePicker||Florian Heckl, Pavel Janik || 3 || x || x || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Native Printing||Yvan Barthelemy || 3 || x || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Native SpellChecker|| || 4 || || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Player||Mox Soini || 4 || x || || || || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Other tasks:&lt;br /&gt;
&lt;br /&gt;
Help for writing bug lists, status of bugs ..etc&lt;br /&gt;
&lt;br /&gt;
Write howto use gdb, leaks, other tools&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;WHEN&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
From Christian Lippka (last meeting, 25th of august 2006): &lt;br /&gt;
 Aug 26 00:21:38 ChristianL&lt;br /&gt;
 from my point of view what is missing for point 1:&lt;br /&gt;
 text layout, complete font support, keyboard support,&lt;br /&gt;
 fixing repaint issues, having aqua install and run out of the box&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;September 2006&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Present the current state of the project at the 2006 OpenOffice conference in Lyon and Paris&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Late 2006&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
fix OpenOffice.org launch&lt;br /&gt;
fix drawing (repainting)&lt;br /&gt;
Implement missing methods and fix most important bugs (mainly the one leading to crash) in:&lt;br /&gt;
ATS&lt;br /&gt;
Salgraphics&lt;br /&gt;
Salinstance&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;January or February 2007&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
make Java work (works partially)&lt;br /&gt;
make intensive debug&lt;br /&gt;
present something working as alpha&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;June 2007	&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Implementation of:&lt;br /&gt;
native filepicker&lt;br /&gt;
native printing&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;2nd Mac porters meeting&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
This section has been moved to [[2nd Mac porters meeting]]&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;IRC Mac port meetings&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
This section has been moved to [[MacOSXPortMeetings]].&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Mac OS X (X11) Quality Assurance&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
This section has been moved to [[Mac OS X ( X11) Quality Assurance]]&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Debug OpenOffice.org using XCode &amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
[[ MacOSX Debug OpenOffice.org using XCode]]&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Description of the Native Port problem&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
=== How does OpenOffice.org work on Mac OS X? ===&lt;br /&gt;
&lt;br /&gt;
Currently, on Mac OS X, OpenOffice.org uses X11, as &amp;quot;client&amp;quot;: X11 is a graphical server, coming from Unix world, and able to run under Linux, *BSD, Solaris, Mac OS X.&lt;br /&gt;
&lt;br /&gt;
 - X11 is run as an application, managed like other Apple applications.&lt;br /&gt;
 - All unix like applications are managed by X11, and from Aqua environment, only X11 is seen as only one applicatiion, &lt;br /&gt;
  even if other Unix/Linux (e.g.) applications are runing.&lt;br /&gt;
&lt;br /&gt;
OpenOffice.org asks X11 to display a window, waits for X11 acknowledgment, and OpenOffice.org displays the window. All transactions use the network, locally or not. the same mechanism is used for everything to be displayed.&lt;br /&gt;
&lt;br /&gt;
[[User:Ericb|Ericb]] 11:39, 3 June 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
=== Issues and known problems ===&lt;br /&gt;
&lt;br /&gt;
All events are managed by OpenOffice.org and X11, using the Xlib&lt;br /&gt;
&lt;br /&gt;
Only .ttf fonts type is currently available. Note: &amp;#039;&amp;#039;&amp;#039;system fonts are available &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
The rendering is made by X11, not by Mac OS X rendering engine.&lt;br /&gt;
&lt;br /&gt;
X11 and all its clients are seen as one application only: drag and drop protocol does not work because of that (solution: Pasteboard Manager)&lt;br /&gt;
&lt;br /&gt;
==== Other links ====&lt;br /&gt;
&lt;br /&gt;
http://wiki.services.openoffice.org/wiki/List_of_OpenOffice.org_Mac_OS_X_issues_and_problems#&lt;br /&gt;
&lt;br /&gt;
http://wiki.services.openoffice.org/wiki/Printing_problems_with_OpenOffice.org_2.0_for_Mac_OS_X#Reporting_printing_problems&lt;br /&gt;
&lt;br /&gt;
[[User:Ericb|Ericb]] 11:39, 3 June 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
== What do we have to do?==&lt;br /&gt;
&lt;br /&gt;
* Implement direct access to Apple graphical engine, using Apple API: Quartz2D/CoreGraphics (and replacing Xlib use)&lt;br /&gt;
&lt;br /&gt;
like: instantiate, manage events and threads for a graphical instance + all needed objects, drawing: manage all drawing cases&lt;br /&gt;
&lt;br /&gt;
* Implement native events management, using CarbonEventManager (replacing Xlib management)&lt;br /&gt;
&lt;br /&gt;
* Implement native font use, using Apple Type Server and ATSUI (for Unicode Imagery) (replacing X11 management)&lt;br /&gt;
&lt;br /&gt;
Work in progress: http://wiki.services.openoffice.org/wiki/Fonts_starting_point_and_documentation&lt;br /&gt;
&lt;br /&gt;
* Implement native sound, using QuickTime (replacing Java Media Framework): [[Mac OS X Porting - Native Audio and Video]]&lt;br /&gt;
&lt;br /&gt;
* Implement native Drag and drop, Implementing Pasteboard Manager: [[Mac OS X Porting - Native Drag and drop]]&lt;br /&gt;
&lt;br /&gt;
* Implement Native Filepicker&lt;br /&gt;
&lt;br /&gt;
* Implement Native Printing: current uses cups, but native printing is mandatory: [[Mac OS X Porting - Native_Printing]]&lt;br /&gt;
&lt;br /&gt;
* Implement Apple Spellchecker&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Where is located the code to be modified?&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
Most of the changes are located in vcl (Visual Class Layer), for everything graphical, events, fonts, rendering and printing.&lt;br /&gt;
&lt;br /&gt;
Other, for sound and movies will be in avmedia (where the player is implemented in OpenOffice.org sources).&lt;br /&gt;
&lt;br /&gt;
For drag and drop, dtrans is concerned (Pasteboard Manager implementation)&lt;br /&gt;
&lt;br /&gt;
[FIXME]: Filepicker? Apple Spellchecker?&lt;br /&gt;
&lt;br /&gt;
[[User:Ericb|Ericb]] 11:39, 3 June 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;How will the new implementation be tested?==&lt;br /&gt;
&lt;br /&gt;
Currently, all openOffice.org code can be compiled without using the Xlib. but of course, a lot of features are missing,&lt;br /&gt;
&lt;br /&gt;
and the final package simply won&amp;#039;t work&lt;br /&gt;
&lt;br /&gt;
In vcl module&amp;quot;, a &amp;#039;&amp;#039;&amp;#039;toy&amp;#039;&amp;#039;&amp;#039; called svdem is built at buildtime. This binary is linked to libvcl* and so all new stuff can be tested.&lt;br /&gt;
&lt;br /&gt;
e.g. : draw anti-aliased lines works well. &lt;br /&gt;
&lt;br /&gt;
Everything implemented in aqua vcl code will be included in libvclplug_aqua, and svdem source code will contain a specific part to proceed tests.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;messagebox cleanup metadata&amp;quot; style=&amp;quot;border:1px solid blue;background-color:#B3FFF5;padding:7px;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;The magic is: when all needed features will work with svdem, it will work in the new version of OpenOffice.org !!&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[FIXME]: add more complete list of features to implement and test.&lt;br /&gt;
&lt;br /&gt;
== AquaVCL 01 cws ==&lt;br /&gt;
&lt;br /&gt;
[[http://qa.openoffice.org/issues/buglist.cgi?keywords=aqua Top 10 of Aqua issues]]&lt;br /&gt;
&lt;br /&gt;
[[Aquavcl01 tasks]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===recent changes ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Recent Changes &lt;br /&gt;
&lt;br /&gt;
[done] fix nRepeat in text entry  (ssa)&lt;br /&gt;
&lt;br /&gt;
[done] fix missing mouse events  (pjanik)&lt;br /&gt;
&lt;br /&gt;
[done] pushbutton where not correctly drawn (ericb)&lt;br /&gt;
&lt;br /&gt;
[done] fix alpha channel in pixmaps (ismael)&lt;br /&gt;
&lt;br /&gt;
[done] fix correct size for main window (GetOoptimaWindowSize()  ) (ericb)&lt;br /&gt;
&lt;br /&gt;
[done] replace obsolete code in salframe.cxx with (ericb)&lt;br /&gt;
&lt;br /&gt;
[done] add new feature for Aqua windows, to allow QuickTime player use( mox )&lt;br /&gt;
&lt;br /&gt;
[done] add mouse drag events  ( pjanik )&lt;br /&gt;
&lt;br /&gt;
[done] modify libsalsystools.dylib to be correctly loaded with the bundle  (ericb, + pjanik)&lt;br /&gt;
&lt;br /&gt;
[done] implement mapfiles for Mac OS X (Stephan Bergmann, Daniel Boelzle, Tino Rachui , Pavel Janik)&lt;br /&gt;
&lt;br /&gt;
[done] fix scrollbar buttons (implement correct methods to retrieve dimensions)&lt;br /&gt;
&lt;br /&gt;
[done] fix checkbuttons and radiobuttons issues: offsets, redrawing of the check marks ( ericb) &lt;br /&gt;
&lt;br /&gt;
[done, not commited] implement UpdateSettings()   (ericb) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Work in progress : &lt;br /&gt;
&lt;br /&gt;
Bitmaps : ( isma87) &lt;br /&gt;
&lt;br /&gt;
Crashes : (tino, pjanik, ericb, isma87 )&lt;br /&gt;
&lt;br /&gt;
Drag and drop :   (vijay)&lt;br /&gt;
&lt;br /&gt;
Printing   (ybart)  &lt;br /&gt;
&lt;br /&gt;
Drawing/ windowing  ( tino )&lt;br /&gt;
&lt;br /&gt;
Implement cursor (ericb) &lt;br /&gt;
&lt;br /&gt;
Native Controls  (ericb) &lt;br /&gt;
&lt;br /&gt;
[work in progress] partial multiline sallayout  (plipli )&lt;br /&gt;
&lt;br /&gt;
To do : &lt;br /&gt;
&lt;br /&gt;
(started, Oliver) - modify the tree to make the bundle start without hack ( issue fixed during buildtime) &lt;br /&gt;
&lt;br /&gt;
(started, Florian Heckl)  verify Native FilePicker implementation ( works , tested in Hamburg  )&lt;br /&gt;
&lt;br /&gt;
(started Ismaek Merzaq)  implement blit functions in salgdi  ( important fix:  probably apha version to be tested once done) &lt;br /&gt;
&lt;br /&gt;
( started Sebastien Plisson- update the missing functions list ( fonts ... ask hdu &amp;amp; cl    ) &lt;br /&gt;
&lt;br /&gt;
( started, ericb, Mox Soini, Sebastien Plisson)  continue to replace obsolete code&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
URGENT :&lt;br /&gt;
&lt;br /&gt;
(work in progress) event issue when tips is enabled causes crashes ( well known window / handler  / window desctructor / event loop bug )&lt;br /&gt;
&lt;br /&gt;
fix crashes with menus  (started : tino ) &lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Sort of documentation about VCL around Native Mac OS X port&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Do we really need to understand how it works? ;-)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vcl content:&lt;br /&gt;
&lt;br /&gt;
ls -laR | wc -l&lt;br /&gt;
  1750&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; Uff 1750 files to analyse :-/&lt;br /&gt;
&lt;br /&gt;
Our purpose is to describe the vcl organisation. The content of vcl is so important, that at the begining, the content will looks a bit confused. e.g. class names ..etc have nothing to do, only description with words and sense, but this will need some time before we can understand everything.&lt;br /&gt;
&lt;br /&gt;
How analyse with more efficiency? After some months to anlalyse &amp;#039;&amp;#039;&amp;#039;&amp;quot;horizontaly&amp;quot;&amp;#039;&amp;#039;&amp;#039;, it appears that list all the content of a directory is not the solution. Of course, we learned a lot, but we now have to complete with &amp;#039;&amp;#039;&amp;#039;&amp;quot;orthogonal&amp;quot;&amp;#039;&amp;#039;&amp;#039; method (compared to the previous one). The first method wasn&amp;#039;t obviously not the good/best way to describe vcl.&lt;br /&gt;
 &lt;br /&gt;
[UPDATE] After some investigations, the use of Design patterns seems to be the most efficient approach to describe vcl. Will try to do so asap.&lt;br /&gt;
&lt;br /&gt;
[FIXME] a different approach (will ask confirmation to Philipp Lohman), could be a description of how it work in runtime. First define what an instance is, a frame, and what exactly is concerned by such &amp;quot;objects&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
With that, we can write a list of different objects all using the same scheme: empty boxes (means pure virtual methods and classes in generic libvvcl), really implemented in the specific part, and finally, the API &amp;quot;encapsulated&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The most difficult is to see where the API is used. But for all the parts, this is the same.&lt;br /&gt;
&lt;br /&gt;
Finally, &amp;#039;&amp;#039;&amp;#039;what is important is the design of vcl&amp;#039;&amp;#039;&amp;#039;. Which &amp;#039;&amp;#039;&amp;#039;patterns&amp;#039;&amp;#039;&amp;#039; are used? What are the dependencies, how works the stack for the events, how works the scheduler, the timers too is very important, even fundamental for Aqua implementation. Will have a look at gsl mailing list, and other resources. Probably everything is already (randomly) written somewhere.&lt;br /&gt;
&lt;br /&gt;
=== VCL organisation ===&lt;br /&gt;
&lt;br /&gt;
Thank&amp;#039;s to Philipp Lohmann for this short, but precise description:&lt;br /&gt;
&lt;br /&gt;
Basically vcl is divided in the system dependent and the system independent part. The interface between these two is mostly the Sal interface (every interface name Sal*: SalInstance, SalFrame, SalGraphics, SalPrinter, etc.).&lt;br /&gt;
&lt;br /&gt;
SalInstance is a factory that can create all the other abstracted interfaces of the system dependent part. It also provides the main loop SalInstance::Yield()&lt;br /&gt;
&lt;br /&gt;
SalFrame abstracts any kind of system window.&lt;br /&gt;
&lt;br /&gt;
SalVirtualDevice abstracts an offscreen window (e.g. a Pixmap on X11)&lt;br /&gt;
&lt;br /&gt;
SalPrinter and SalInfoPrinter abstract the system print queues where SalInfoPrinter is for querying and SalPrinter for actual printing.&lt;br /&gt;
&lt;br /&gt;
SalGraphics is an interface produced by either SalFrame, SalVirtualDevice or SalPrinter which is used for actual drawing operations (text, bitmaps, vector graphics)&lt;br /&gt;
&lt;br /&gt;
SalSound is for sound playing.&lt;br /&gt;
&lt;br /&gt;
SalBitmap provides memory for bitmap graphics as well as methods converting this memory to a system handle (e.g. a Pixmap on X11).&lt;br /&gt;
&lt;br /&gt;
SalOpenGL provides OpenGL functionality if available.&lt;br /&gt;
&lt;br /&gt;
SalTimer is an interface for periodically triggering the event queue (to timer implementation).&lt;br /&gt;
&lt;br /&gt;
SalI18NImeStatus handles how the status window of an Input Method Editor (IME) should display (this is mainly X11 specific).&lt;br /&gt;
&lt;br /&gt;
SalSystem has some system specific methods that did not belong anywhere else:-)&lt;br /&gt;
&lt;br /&gt;
Of all these there interfaces is at least one implementation per system (Windows, X11 or Mac). The Unix implementation also has a plugin concept to allow for integration of different native toolkits (currently gtk and Qt) which became necessary for the implementation of Native Widget Framework (NWF) to display controls like their normal desktop counterparts.&lt;br /&gt;
&lt;br /&gt;
Basically the independent part (what is beneath vcl/source directory) has generic methods for drawing, window handling and stuff which it brings into a suitable form and then delegates to the system specific implementation (located beneath vcl/win for Windows and vcl/unx for the X11 platforms).&lt;br /&gt;
&lt;br /&gt;
[[User:Ericb|Ericb]] 16:12, 1 July 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
===Sub-directories description ===&lt;br /&gt;
&lt;br /&gt;
==== &amp;#039;&amp;#039;&amp;#039;Organisation of vcl directories&amp;#039;&amp;#039;&amp;#039; ====&lt;br /&gt;
&lt;br /&gt;
[[Image:aquavcl_organisation_complete_02.jpg]]&lt;br /&gt;
&lt;br /&gt;
==== &amp;#039;&amp;#039;&amp;#039;Directories in vcl. Short description&amp;#039;&amp;#039;&amp;#039; ====&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; aqua &amp;#039;&amp;#039;&amp;#039;: The name Aqua means Apple look and feel, and is well known as [http://developer.apple.com/documentation/UserExperience/Conceptual/OSXHIGuidelines/XHIGIntro/chapter_1_section_1.html Aqua Human Interface Guidelines]. This look and feel means Mac OS X. The work was begun by (probably) P. luby, Dan Williams Herbert Duerr (most of fonts stuff) and Ed Peterlin. Currently in ruin, this directory does contain a lot of ideas to investigate. The most important part of needed changes for native version (3.0) will be done inside aqua dir inc: does contain all vcl relative includes [PART1]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; prj &amp;#039;&amp;#039;&amp;#039;: Does contain build.lst and d.lst build.lst give us dependencies: probably a lot for vcl, build 98th module over ~148. Everything graphical depends in vcl. &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; qa &amp;#039;&amp;#039;&amp;#039; does contain all quality assurancy stuff&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;source&amp;#039;&amp;#039;&amp;#039;: the most important:-) This directory contains common sources for all architectures and OS. Mainly: Windows, Unix: Linux , Mac OS X (X11), Solaris, including generic, kde and gtk plugins, and Aqua (Mac OS X without X11, work currently in progress). &lt;br /&gt;
&lt;br /&gt;
Depending on the OS and the architecture, binaries are built or not.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; test &amp;#039;&amp;#039;&amp;#039;: This directory does contain all the needed stuff for tests. As example, in qa/testdocuments, you&amp;#039;ll find three documents (one writer, one calc and one impress) for tests purpose. &lt;br /&gt;
Other available tests are about memcheck and persistent window state. &lt;br /&gt;
 &lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; unx &amp;#039;&amp;#039;&amp;#039;: this directory does contain all unixes stuff. We have to understand what is inside to implement aqua port. For example, a lot of classes/strutures and objects use Xlib calls we have to replace with Carbon/Cocoa call (at least at first time) for Mac OS X native port.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; win &amp;#039;&amp;#039;&amp;#039;: Doing Mac OS X native port, I first believed this directory was not interesting for us, but I was wrong: OpenOffice.org roots are inside this directory, and a lot of comments and resources are inside. Mainly interesting if Carbon is used.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;workben&amp;#039;&amp;#039;&amp;#039;: Does contain a toy called &amp;quot;svdem&amp;quot;. svdem is a binary, used for new implementations. For example, actual aqua development uses svdem intensively, to verify all important properties we need: &lt;br /&gt;
&lt;br /&gt;
- display a window first (al least ...:)) &lt;br /&gt;
&lt;br /&gt;
- close cleanly this window&lt;br /&gt;
&lt;br /&gt;
- display a point&lt;br /&gt;
&lt;br /&gt;
- trace a line&lt;br /&gt;
&lt;br /&gt;
- trace an area &lt;br /&gt;
&lt;br /&gt;
- superpose two areas doing some important graphical operations, (like xor),&lt;br /&gt;
&lt;br /&gt;
- display a character&lt;br /&gt;
&lt;br /&gt;
- display a menu. &lt;br /&gt;
&lt;br /&gt;
- intercept events correctly.&lt;br /&gt;
&lt;br /&gt;
[FIXME] add more tests&lt;br /&gt;
&lt;br /&gt;
[[User:Ericb|Ericb]] 13:21, 3 June 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Naming convention&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
* Class names start with upper case letters, to improve readability.&lt;br /&gt;
&lt;br /&gt;
* Implemented Class names are derived from the virtual classes but can of course take arbitrary names.&lt;br /&gt;
To increase readability, it&amp;#039;s recommended to closely follow the base class name.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Impl prefix: means Implementation details&amp;#039;&amp;#039;&amp;#039;. The concerned class or method or function is not used outside of this module, so no external code (or other libraries) can see it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[ Events types using Carbon API (Mac OS X): ]]&amp;#039;&amp;#039;&amp;#039; A lot of events have to be managed in runtime. Here is a short description&lt;br /&gt;
&lt;br /&gt;
- do not freeze because bad event loops&lt;br /&gt;
&lt;br /&gt;
- event types implementation: currently, they are defined in vcl/aqua/inc/aquavclevents.hxx&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Apart: exact sense of hedabu? -&amp;gt; [FIXME] as far as I understood it: it is like &amp;quot;copy&amp;quot; to deliver software into the solver, with extra magic. The header files for example are manipulated so paths need not be exact. &amp;quot;headabu&amp;quot; is supposed to disappear little by little.&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;What do we have to build in vcl?&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
Two libraries, corresponding ressources (localized) and a toy so called « svdem »&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Common part&amp;#039;&amp;#039;&amp;#039;: &lt;br /&gt;
&lt;br /&gt;
in grey on right. The result will be a non architecture dependant library, built in all cases: for instance, libvcl680mxi.dylib on Mac Intel.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Specific part  &amp;quot; a plugin &amp;quot; &amp;#039;&amp;#039;&amp;#039;: &lt;br /&gt;
&lt;br /&gt;
Light yellow: aqua part will only concern Mac OS X (non X11) the name will probably be libvcl_aqua680mxi.dylib &lt;br /&gt;
&lt;br /&gt;
As you can see, win means windows part, in blue&lt;br /&gt;
&lt;br /&gt;
For Unix build (Linux, Solaris or current Mac OS X X11), in purple.&lt;br /&gt;
&lt;br /&gt;
Result will be:&lt;br /&gt;
&lt;br /&gt;
libvclplug_PLUGIN680mxi.DLLSUFFIX , where PLUGIN can be iether gen (generic) or gtk (using gtk+) or kde (using qt), and DLLSUFFIX can be either .so (linux) or .dylib (Mac OS X) ...etc (I&amp;#039;m not sure for other cases).&lt;br /&gt;
&lt;br /&gt;
Example: libvcl680mxi.dylib and libvclplug_aqua680mxi.dylib&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;In runtime&amp;#039;&amp;#039;&amp;#039;, libvclplug_aqua will be linked to libvcl680. the first one will contain the real implementation (respecting the API, e.g. Carbon) while the generic libvcl will only contain pure virtual methods ...etc like &amp;quot;empty boxes&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Current Aqua content ===&lt;br /&gt;
&lt;br /&gt;
A more complete description of aqua (Mac OS X / no X11 specific): [[Image:Vcl_aqua_organisation_02_tree.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==EXISTING objects to build in aqua==&lt;br /&gt;
&lt;br /&gt;
===Sal APP &amp;quot;everything application&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
[FIXME] add all objects descriptions&lt;br /&gt;
&lt;br /&gt;
==== saldata ====&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Defined in plugin exclusively&amp;#039;&amp;#039;&amp;#039; (i.e. for headers)&lt;br /&gt;
&lt;br /&gt;
Unix: unx/source/app/saldata.cxx (header in unx/inc)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Aqua: aqua/source/app/saldata.cxx (header in win/inc)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Windows: win/source/app/saldata.cxx (header in aqua/inc)&lt;br /&gt;
&lt;br /&gt;
* Role: saldata contains various kind of data used by the implementation for the concerned platform. &amp;#039;&amp;#039;&amp;#039;It is a bunch of global data collections reserved for the platform&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
It is just completely platform dependent, and nobody except this plugin can see it.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Saldata is something like a &amp;quot;second sal&amp;quot;, but providing an abstraction regarding windowing and graphics&amp;#039;&amp;#039;&amp;#039;, while SAL module provides an abstraction more Operating System oriented) &lt;br /&gt;
&lt;br /&gt;
e.g. : have a look at XRequest array in vcl/unx/source/app/saldata.cxx =&amp;gt; all calls are for Xlib (X11).  Ok, useless there, but interesting:-)&lt;br /&gt;
&lt;br /&gt;
[FIXME]: use Windows implementation could be a good starting point. Nothing is the same, but the current aquavcl cws uses similar objects, and it works very correctly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
saldatax.cxx uses classes SalInstance, SalObject, SalFrame, SalVirtualDevice, SalPrinter and fontList.&lt;br /&gt;
&lt;br /&gt;
Current list of possible objects who can be instantiated/released:&lt;br /&gt;
&lt;br /&gt;
structure SalData: does contain pointers on all kind of objects from other classes used in saldata.&lt;br /&gt;
&lt;br /&gt;
inline functions: [FIXME]: complete the description&lt;br /&gt;
&lt;br /&gt;
- SetSalData:&lt;br /&gt;
- GetSalData:&lt;br /&gt;
- GetAppSalData:&lt;br /&gt;
&lt;br /&gt;
==== salinst ====&lt;br /&gt;
&lt;br /&gt;
=&amp;gt; implemented in vcl/aqua/source/app/salinst.cxx&lt;br /&gt;
&lt;br /&gt;
Role: &lt;br /&gt;
&lt;br /&gt;
* get environment, mutexes, instantiate AquaSalInstance (Ctor, Dtor),&lt;br /&gt;
&lt;br /&gt;
* instantiates/releases a lot of other objects using Get() / CreateObject() / DestroyObject() methods.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Current list of possible objects who can be instantiated/released:&lt;br /&gt;
&lt;br /&gt;
 * VirtualDevice [FIXME]: exact role?&lt;br /&gt;
&lt;br /&gt;
 *Printer  &lt;br /&gt;
&lt;br /&gt;
- GetDefaultPrinter/ CreatePrinter() / DestroyPrinter - what a name ;-) -&lt;br /&gt;
&lt;br /&gt;
- InfoPrinter (Get/Create/Delete)&lt;br /&gt;
&lt;br /&gt;
- PrinterQueue (DeletePrinterQueueInfo / GetPrinterQueueInfo / GetPrinterQueueState)&lt;br /&gt;
&lt;br /&gt;
 * System (Create / Delete) [FIXME]: what means system here?&lt;br /&gt;
&lt;br /&gt;
 * Events: &lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::SetEventCallback()&lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::SetErrorEvenCallback()&lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::GetConnectionIdentifier()&lt;br /&gt;
&lt;br /&gt;
 * Menu / MenuItem: &lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::CreateMenu() / same for DestroyMenu()&lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::CreateMenuItem / same DestroyMenuItem()&lt;br /&gt;
&lt;br /&gt;
 * Sound: &lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::CreateSalSound()  =&amp;gt; object to a pointer of SalSound type&lt;br /&gt;
&lt;br /&gt;
Note: AquaSalInstance::DestroySalSound is not implemented (?)&lt;br /&gt;
&lt;br /&gt;
 * Timer: CreateTimer() /&lt;br /&gt;
&lt;br /&gt;
AquaSalInstance:: DestroyTimer() is not yet implemented (?)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Class MacImeStatus: inherits of SalI18NImeStatus&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; only there to see if there is a window to toggle into menubar [FIXME]??&lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::CreateI18NImeStatus(): instantiates MacImeStatus&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;For futher informations, see: &amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;[[Content of salinst.cxx]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
([[User:Ericb|Ericb]] 16:11, 20 May 2006 (CEST) )&lt;br /&gt;
&lt;br /&gt;
==== salmain ====&lt;br /&gt;
&lt;br /&gt;
Role: if possible, runs the standard vcl application code SVMain()&lt;br /&gt;
&lt;br /&gt;
([[User:Ericb|Ericb]] 16:15, 20 May 2006 (CEST))&lt;br /&gt;
&lt;br /&gt;
==== salsound ====&lt;br /&gt;
&lt;br /&gt;
==== salsys ====&lt;br /&gt;
&lt;br /&gt;
==== saltimer ====&lt;br /&gt;
&lt;br /&gt;
=== Sal GDI (everything Graphical Display Interface) ===&lt;br /&gt;
&lt;br /&gt;
====salgdinativewidgets====&lt;br /&gt;
&lt;br /&gt;
[[native controls]]&lt;br /&gt;
&lt;br /&gt;
==== salatslayout ====&lt;br /&gt;
&lt;br /&gt;
==&amp;gt; implemented in vcl/aqua/source/gdi/salatslayout.cxx&lt;br /&gt;
&lt;br /&gt;
- Handle text layouting :&lt;br /&gt;
&lt;br /&gt;
    * Use ATSUI (ATSUCreateTextLayoutFromPtr) to layout the text unicode char buffer&lt;br /&gt;
    * Use ATSUI (ATSU..) to get informations about glyphs&lt;br /&gt;
    * Populate different arrays (mpGlyph2Chars, mpChars2Glyph, mpCharsWidths, mpGlyphAdvances)&lt;br /&gt;
      that are used in various methods.&lt;br /&gt;
&lt;br /&gt;
==== salatsuiutils ====&lt;br /&gt;
&lt;br /&gt;
==== salfontutils ====&lt;br /&gt;
&lt;br /&gt;
==== salmathutils ====&lt;br /&gt;
&lt;br /&gt;
==== sal bmp ====&lt;br /&gt;
&lt;br /&gt;
==== salvd ====&lt;br /&gt;
&lt;br /&gt;
==== salframe ====&lt;br /&gt;
&lt;br /&gt;
==== salpixmaputils====&lt;br /&gt;
&lt;br /&gt;
==== salprn ====&lt;br /&gt;
&lt;br /&gt;
====salrectangle====&lt;br /&gt;
&lt;br /&gt;
==== salvd ====&lt;br /&gt;
&lt;br /&gt;
=== Sal Window===&lt;br /&gt;
&lt;br /&gt;
==== salframe ====&lt;br /&gt;
&lt;br /&gt;
====salobj====&lt;br /&gt;
&lt;br /&gt;
== TO BE IMPLEMENTED (missing in Aqua)==&lt;br /&gt;
&lt;br /&gt;
===Audio===&lt;br /&gt;
&lt;br /&gt;
====audioconvert====&lt;br /&gt;
 (obsolete?) &lt;br /&gt;
&lt;br /&gt;
====devaudio====&lt;br /&gt;
(obsolete?)&lt;br /&gt;
&lt;br /&gt;
====native sound====&lt;br /&gt;
&lt;br /&gt;
====salimpsound====&lt;br /&gt;
&lt;br /&gt;
====vsound====&lt;br /&gt;
&lt;br /&gt;
===i18n===&lt;br /&gt;
&lt;br /&gt;
===keysymnames===&lt;br /&gt;
&lt;br /&gt;
===saldisp===&lt;br /&gt;
&lt;br /&gt;
===sm===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[FIXME]: is session manager usefull?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Native Controls&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
====Scrollbar====&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Works as expected&amp;#039;&amp;#039;&amp;#039;. The most important work is done&lt;br /&gt;
&lt;br /&gt;
See : [[Mac_OS_X_Porting_-_Native_Controls#ScrollBar]]&lt;br /&gt;
&lt;br /&gt;
====DrawThemeButton() documentation====&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Started&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
See : [[Mac_OS_X_Porting_-_Native_Controls#ComboBox]]&lt;br /&gt;
&lt;br /&gt;
Started&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DrawThemeButton&lt;br /&gt;
Draws a button.&lt;br /&gt;
&lt;br /&gt;
OSStatus DrawThemeButton (&lt;br /&gt;
   const Rect * inBounds,&lt;br /&gt;
   ThemeButtonKind inKind,&lt;br /&gt;
   const ThemeButtonDrawInfo * inNewInfo,&lt;br /&gt;
   const ThemeButtonDrawInfo * inPrevInfo,&lt;br /&gt;
   ThemeEraseUPP inEraseProc,&lt;br /&gt;
   ThemeButtonDrawUPP inLabelProc,&lt;br /&gt;
   UInt32 inUserData&lt;br /&gt;
);&lt;br /&gt;
Parameters&lt;br /&gt;
inBounds&lt;br /&gt;
A pointer to a structure of type Rect. Pass a rectangle specifying the boundary of the button, in local coordinates.&lt;br /&gt;
&lt;br /&gt;
inKind&lt;br /&gt;
A value of type ThemeButtonKind. Pass a constant specifying the type of button to draw. &lt;br /&gt;
See “Theme Buttons” for descriptions of possible values.&lt;br /&gt;
&lt;br /&gt;
inNewInfo&lt;br /&gt;
A pointer to a structure of type ThemeButtonDrawInfo. Before calling DrawThemeButton, &lt;br /&gt;
set the structure to contain the new state, value, and adornment for the button. &lt;br /&gt;
DrawThemeButton uses the information passed in the inNewInfo and inPrevInfo parameters&lt;br /&gt;
to apply transitional animation or sound effects as the button state changes, if such are &lt;br /&gt;
specified under the current theme.&lt;br /&gt;
&lt;br /&gt;
inPrevInfo&lt;br /&gt;
A pointer to a structure of type ThemeButtonDrawInfo. If the button state is changing,&lt;br /&gt;
set the structure to contain the previous state, value, and adornment for the button, &lt;br /&gt;
to allow DrawThemeButton to apply any transitional effects. If the button state is not &lt;br /&gt;
changing, you can pass NULL.&lt;br /&gt;
&lt;br /&gt;
inEraseProc&lt;br /&gt;
A value of type ThemeEraseUPP. If you have a custom background, use this parameter to pass&lt;br /&gt;
a universal function pointer to an application-defined function such as that described in &lt;br /&gt;
ThemeEraseProcPtr. DrawThemeButton calls this function to erase the background before drawing&lt;br /&gt;
 the button. If you pass NULL, DrawThemeButton&amp;#039;s default behavior is to erase the background&lt;br /&gt;
 for you.&lt;br /&gt;
&lt;br /&gt;
inLabelProc&lt;br /&gt;
A value of type ThemeButtonDrawUPP. If you pass a universal function pointer to an &lt;br /&gt;
application-defined function such as that described in ThemeButtonDrawProcPtr, DrawThemeButton&lt;br /&gt;
 calls that function to draw the label of the button. If you pass NULL, no label is drawn.&lt;br /&gt;
&lt;br /&gt;
inUserData&lt;br /&gt;
An unsigned 32-bit integer. Provide any data to be passed in to the callback functions specified in &lt;br /&gt;
the inLabelProc and inEraseProc parameters. Pass NULL if you do not wish to provide any data.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
A result code. See “Appearance Manager Result Codes”.&lt;br /&gt;
&lt;br /&gt;
Discussion&lt;br /&gt;
The DrawThemeButton function draws a theme-compliant button. If a ThemeEraseProcPtr is &lt;br /&gt;
specified in the inEraseProc parameter, DrawThemeButton uses that function to erase the &lt;br /&gt;
background of the button before drawing the button. After the button is drawn, if a&lt;br /&gt;
ThemeButtonDrawProcPtr is specified in the inLabelProc parameter, DrawThemeButton calls&lt;br /&gt;
that function to draw the button’s label.&lt;br /&gt;
&lt;br /&gt;
Note that DrawThemeButton also draws any appearance adornments for the button and that these&lt;br /&gt;
can extend beyond the button’s basic bounding rectangle, as specified in the inBounds parameter,&lt;br /&gt;
and may be of variable shape. You may therefore wish to call the function&lt;br /&gt;
GetThemeButtonBackgroundBounds to obtain the actual rectangle containing the pixels belonging&lt;br /&gt;
to a button under the current theme.&lt;br /&gt;
&lt;br /&gt;
Version Notes&lt;br /&gt;
This function is available with Appearance Manager 1.1 and later.&lt;br /&gt;
&lt;br /&gt;
Availability&lt;br /&gt;
Available in CarbonLib 1.0 and later when Appearance 1.1 or later is present.&lt;br /&gt;
Available in Mac OS X 10.0 and later.&lt;br /&gt;
Declared In&lt;br /&gt;
Appearance.h&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====HIComboBoxCreate() documentation====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HIComboBoxCreate&lt;br /&gt;
Creates a combo box control.&lt;br /&gt;
&lt;br /&gt;
OSStatus HIComboBoxCreate (&lt;br /&gt;
   const HIRect* boundsRect,&lt;br /&gt;
   CFStringRef text,&lt;br /&gt;
   const ControlFontStyleRec* style,&lt;br /&gt;
   CFArrayRef list,&lt;br /&gt;
   OptionBits inAttributes,&lt;br /&gt;
   HIViewRef* outComboBox&lt;br /&gt;
);&lt;br /&gt;
Parameters&lt;br /&gt;
boundsRect&lt;br /&gt;
The bounding box of the control.&lt;br /&gt;
&lt;br /&gt;
text&lt;br /&gt;
The default text in the editable portion of the control. Can be NULL.&lt;br /&gt;
&lt;br /&gt;
style&lt;br /&gt;
The font style of the both editable text and the text in the disclosure list. Can be NULL.&lt;br /&gt;
&lt;br /&gt;
list&lt;br /&gt;
The default values available in the disclosure list. Can be NULL.&lt;br /&gt;
&lt;br /&gt;
inAttributes&lt;br /&gt;
The default attributes of the combo box. For possible values, see “Combo Box Attributes”.&lt;br /&gt;
&lt;br /&gt;
outComboBox&lt;br /&gt;
On exit, a pointer to a reference for the new control.&lt;br /&gt;
&lt;br /&gt;
Discussion&lt;br /&gt;
The combo box can be used in compositing mode, as well as traditional Control Manager mode.&lt;br /&gt;
When created, this view is invisible. To see the view, you must show the view by calling HIViewSetVisible.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== What is used for Linux, Windows, Mac OS X ...build ? ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[Description of the dependencies]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[Windows]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[MacOS X]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[Linux]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[Solaris]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Content of Aqua ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[Click here to see the complete list]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Content of vcl/inc&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Notes: &lt;br /&gt;
&lt;br /&gt;
1) Where to find includes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;foo/bar.hxx&amp;gt; means you can find bar.hxx in the foo module. The new style file is foo/inc/foo/bar.hxx, old style is foo/inc/bar.hxx and sometimes the file is somewhere else in the tree or generated. The deliver process copies/generates the file into solver at solver/680/build_type/inc/foo. Good for fixing broken builds. ;-)&lt;br /&gt;
&lt;br /&gt;
2) &lt;br /&gt;
suffix .h (for C calls or first version?) or .hxx (C++) &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;A) Family of includes&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
Looking more closely at the list brings to the fore (expression from dictionary ;-) ) that include names are&lt;br /&gt;
informatives. Most of the time, the name gives the function/role.&lt;br /&gt;
What is interesting is the files with name begining with &amp;quot;sal&amp;quot;. sal means System Abstraction Layer + include&amp;#039;s function (or explicit name). &lt;br /&gt;
&lt;br /&gt;
Partial list, for example:&lt;br /&gt;
&lt;br /&gt;
salatype.hxx&lt;br /&gt;
&lt;br /&gt;
salbmp.hxx&lt;br /&gt;
&lt;br /&gt;
salctrlhandle.hxx&lt;br /&gt;
&lt;br /&gt;
salctype.hxx&lt;br /&gt;
&lt;br /&gt;
salframe.hxx&lt;br /&gt;
&lt;br /&gt;
salgdi.hxx&lt;br /&gt;
&lt;br /&gt;
salgeom.hxx&lt;br /&gt;
&lt;br /&gt;
sallayout.hxx (main header for fonts services)&lt;br /&gt;
...&lt;br /&gt;
salmenu&lt;br /&gt;
salnativewidgets&lt;br /&gt;
...etc&lt;br /&gt;
&lt;br /&gt;
Other important families are &amp;quot;sv&amp;quot; and &amp;quot;uno&amp;quot; or &amp;quot;win&amp;quot; (window) prefixed. sal family will be analysed apart.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;B) Includes of includes&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Some includes are more important than other. To prove this, just have a look is sufficient: some are always needed, and some more rarely.&lt;br /&gt;
&lt;br /&gt;
To verify, a simple test to do in vcl/inc:&lt;br /&gt;
&lt;br /&gt;
egrep -H &amp;quot;#include&amp;quot; ./* | wc -l  gives me 681 lines ! And some of them are the same...&lt;br /&gt;
&lt;br /&gt;
To know more, the precedent command line can be modified to make appear the numerous call &lt;br /&gt;
to the same includes files.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
egrep -H &amp;quot;#include&amp;quot; ./* | cut -d&amp;quot;#&amp;quot; -f2 | sort &amp;gt; liste.txt&lt;br /&gt;
&lt;br /&gt;
The content of liste.txt is explicit: dllapi.h, sv.h and some other are very important, while some other includes are only one or two times used. We can see too that vos includes are numerous, even if vos is deprecated**&lt;br /&gt;
&lt;br /&gt;
 **see http://wiki.services.openoffice.org/wiki/Source_code_directories&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I&amp;#039;m nearly sure that a complete analysis of just this result will give us a lot of information.&lt;br /&gt;
&lt;br /&gt;
I propose to change the order of analysis starting with dllapi.h and sv.h.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[to be continued]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;B1) &amp;quot;sal&amp;quot; includes family&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
[[salinst.hxx]] This seems to be the main include file&lt;br /&gt;
&lt;br /&gt;
[[salatype.hxx]]&lt;br /&gt;
&lt;br /&gt;
[[salctrlhandle.hxx]]&lt;br /&gt;
&lt;br /&gt;
[[salctype.hxx]]&lt;br /&gt;
&lt;br /&gt;
[[salframe.hxx]]&lt;br /&gt;
&lt;br /&gt;
[[salgdi.hxx]]&lt;br /&gt;
&lt;br /&gt;
[[salgeom.hxx]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[ sallayout.hxx ]]&amp;#039;&amp;#039;&amp;#039; &amp;lt;-- see Native Fonts implementation&lt;br /&gt;
&lt;br /&gt;
[[salgtype.hxx]]&lt;br /&gt;
&lt;br /&gt;
[[vcl/inc/salobj.hxx]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;B2) Classicals includes&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
file: abstdlg.hxx [ means abstract dialog ]&lt;br /&gt;
&lt;br /&gt;
This includes does contain the following classes definitions:&lt;br /&gt;
&lt;br /&gt;
[FIXME] : choose a precise presentation template for classes &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
VclAbstractDialog,&lt;br /&gt;
&lt;br /&gt;
VclAbstractTerminateDialog, &lt;br /&gt;
&lt;br /&gt;
VclAbstractRefreshableDialog,&lt;br /&gt;
 &lt;br /&gt;
VclAbstractDialogFactory, &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
uses &amp;lt;tools/solar.h&amp;gt; , &amp;lt;tools/string.hxx&amp;gt; + &lt;br /&gt;
&lt;br /&gt;
&amp;quot;dllapi.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Note : dllapi.h is very interesting because when we have to find (for example) a library suffix, SAL_DLLEXTENSSION can replace all suffixes (every OS&amp;#039;s and archs). Just including sal/config.h does it ! &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Classes:&lt;br /&gt;
&lt;br /&gt;
Window -&amp;gt; what? [FIXME]&lt;br /&gt;
ResId -&amp;gt; what?&lt;br /&gt;
&lt;br /&gt;
Does contain the prototype of VclAbstractDialog, inherit of VCL_DLLPUBLIC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
file: dllapi.h [ dll for dynamic linked library ]&lt;br /&gt;
Uses: &amp;lt;sal/config.h&amp;gt; and &amp;gt;sal/types/h&amp;gt;&lt;br /&gt;
includes: VCL_DLLPUBLIC macro&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
file: accel.h [ means accelerator ]&lt;br /&gt;
&lt;br /&gt;
Classes:&lt;br /&gt;
&lt;br /&gt;
Accelerator &lt;br /&gt;
{&lt;br /&gt;
}&lt;br /&gt;
ImplAccelEntry &lt;br /&gt;
{&lt;br /&gt;
public members: &lt;br /&gt;
&lt;br /&gt;
Names&lt;br /&gt;
&lt;br /&gt;
mnId&lt;br /&gt;
maKeyCode&lt;br /&gt;
mpAccel&lt;br /&gt;
mpAutoAccel&lt;br /&gt;
mbEnabled&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function / returns / parameters&lt;br /&gt;
&lt;br /&gt;
ImplGetKeyCode / void / KeyFuncType eFunc, ref rCode1 , ref rCode2, ref rCode3&lt;br /&gt;
&lt;br /&gt;
file: accel.hxx &lt;br /&gt;
&lt;br /&gt;
Uses: &amp;lt;sv.h&amp;gt; , &amp;quot;dllapi.h&amp;quot; ,&amp;lt;tools/resid.hxx&amp;gt;, &amp;lt;&amp;lt;tools/rc.hxx&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Classes:&lt;br /&gt;
&lt;br /&gt;
ImplAccelData;&lt;br /&gt;
ImplAccelEntry;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Important Links ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[Progressive implementation]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Native Font server Implementation&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;[[Fonts starting point and documentation]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Native Sound Implementation&amp;#039;&amp;#039;&amp;#039;: [[Mac OS X Porting - Native Audio and Video]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Native Printing Implementation&amp;#039;&amp;#039;&amp;#039;: [[Mac OS X Porting - Native_Printing]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Drag and Drop implementation&amp;#039;&amp;#039;&amp;#039;: [[Mac OS X Porting - Native Drag and drop]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Data Acquisition&amp;#039;&amp;#039;&amp;#039; : [[Mac OS X Porting - Data Acquisition]]&lt;br /&gt;
&lt;br /&gt;
This work is part of http://wiki.services.openoffice.org/wiki/Mac_OS_X_Porting_-_Work_Areas/Todo%27s&lt;br /&gt;
&lt;br /&gt;
[to be continued:-) ]&lt;br /&gt;
&lt;br /&gt;
== Keyboard comparizon between OpenOffice.org / Mac OS X  application ==&lt;br /&gt;
&lt;br /&gt;
[FIXME] redo a cleanest array &lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;vertical-align:top; text-align:centered; background-color:#F0F0F0;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#99CCFF; font-weight:bold;&amp;quot; &lt;br /&gt;
| Modifier||+ key  || Result || TextEdit  returns&lt;br /&gt;
|-&lt;br /&gt;
|ALT|| a||æ ||æ &lt;br /&gt;
|-&lt;br /&gt;
|ALT||b||ß ||ß&lt;br /&gt;
|-&lt;br /&gt;
|ALT||c||© ||©&lt;br /&gt;
|-&lt;br /&gt;
|ALT||d||∂ ||∂&lt;br /&gt;
|-&lt;br /&gt;
|ALT||e||ê ||ê&lt;br /&gt;
|-&lt;br /&gt;
|ALT||f||ƒ ||ƒ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||g ||ﬁ ||ﬁ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||h ||Ì ||Ì&lt;br /&gt;
|-&lt;br /&gt;
|ALT||i ||î ||î&lt;br /&gt;
|-&lt;br /&gt;
|ALT||j ||Ï ||Ï&lt;br /&gt;
|-&lt;br /&gt;
|ALT||k ||È ||È&lt;br /&gt;
|-&lt;br /&gt;
|ALT||l ||¬ ||¬&lt;br /&gt;
|-&lt;br /&gt;
|ALT||m ||µ ||µ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||n ||~ ||~&lt;br /&gt;
|-&lt;br /&gt;
|ALT||o ||œ ||œ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||p ||π ||π&lt;br /&gt;
|-&lt;br /&gt;
|ALT||q ||‡ ||‡&lt;br /&gt;
|-&lt;br /&gt;
|ALT||r ||® ||®&lt;br /&gt;
|-&lt;br /&gt;
|ALT||s ||Ò ||Ò&lt;br /&gt;
|-&lt;br /&gt;
|ALT||t ||† ||†&lt;br /&gt;
|-&lt;br /&gt;
|ALT||u ||º ||º&lt;br /&gt;
|-&lt;br /&gt;
|ALT||v ||◊ ||◊&lt;br /&gt;
|-&lt;br /&gt;
|ALT||w ||‹ ||‹&lt;br /&gt;
|-&lt;br /&gt;
|ALT||x ||≈ ||≈&lt;br /&gt;
|-&lt;br /&gt;
|ALT||y ||Ú ||Ú&lt;br /&gt;
|-&lt;br /&gt;
|ALT||z ||Â ||Â&lt;br /&gt;
|-&lt;br /&gt;
|ALT||A ||Æ ||Æ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||B ||∫ ||∫&lt;br /&gt;
|-&lt;br /&gt;
|ALT||C ||¢ ||¢&lt;br /&gt;
|-&lt;br /&gt;
|ALT||D||∆||∆&lt;br /&gt;
|-&lt;br /&gt;
|ALT||F ||· ||·&lt;br /&gt;
|-&lt;br /&gt;
|ALT||G ||ﬂ ||ﬂ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||H ||Î ||Î&lt;br /&gt;
|-&lt;br /&gt;
|ALT||I ||Î ||Î&lt;br /&gt;
|-&lt;br /&gt;
|ALT||J ||Í ||Í&lt;br /&gt;
|-&lt;br /&gt;
|ALT||K ||Ë ||Ë&lt;br /&gt;
|-&lt;br /&gt;
|ALT||L || &amp;lt;pre&amp;gt;|&amp;lt;/pre&amp;gt; ||&amp;lt;pre&amp;gt;|&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|ALT||M ||Ó ||Ó&lt;br /&gt;
|-&lt;br /&gt;
|ALT||N ||ı ||ı&lt;br /&gt;
|-&lt;br /&gt;
|ALT||O ||Œ ||Œ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||P ||∏ ||∏&lt;br /&gt;
|-&lt;br /&gt;
|ALT||Q ||Ω ||Ω&lt;br /&gt;
|-&lt;br /&gt;
|ALT||R ||‚ ||‚&lt;br /&gt;
|-&lt;br /&gt;
|ALT||S ||∑ ||∑&lt;br /&gt;
|-&lt;br /&gt;
|ALT||T ||™ ||™&lt;br /&gt;
|-&lt;br /&gt;
|ALT||U ||ª ||ª&lt;br /&gt;
|-&lt;br /&gt;
|ALT||V ||√ ||√&lt;br /&gt;
|-&lt;br /&gt;
|ALT||W ||› ||›&lt;br /&gt;
|-&lt;br /&gt;
|ALT||X ||⁄ ||⁄&lt;br /&gt;
|-&lt;br /&gt;
|ALT||Y ||Ÿ ||Ÿ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||Z ||Å ||Å&lt;br /&gt;
|-&lt;br /&gt;
|ALT||$ ||€ ||€&lt;br /&gt;
|-&lt;br /&gt;
|ALT||` ||@ ||@&lt;br /&gt;
|-&lt;br /&gt;
|ALT||£ ||# ||#&lt;br /&gt;
|-&lt;br /&gt;
|ALT||* ||¥ ||¥&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Sous réserve d&amp;#039;erreur ou omission [[User:Ericb|Ericb]] 00:05, 14 January 2007 (CET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[User:Ericb|Ericb]] 15:00, 22 Jul 2005 (EDT)&lt;br /&gt;
&lt;br /&gt;
[[Category:Porting]]&lt;br /&gt;
[[Category:MacOSX]]&lt;br /&gt;
[[Category:Aqua]]&lt;/div&gt;</summary>
		<author><name>Plipli</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=User:Ericb&amp;diff=25077</id>
		<title>User:Ericb</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=User:Ericb&amp;diff=25077"/>
		<updated>2007-02-13T12:38:33Z</updated>

		<summary type="html">&lt;p&gt;Plipli: /* salatslayout */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Public Documentation License Notice==&lt;br /&gt;
&lt;br /&gt;
The contents of this Documentation (excepted Native Port Roadmap),are subject to the Public Documentation License Version 1.0 (the &amp;quot;License&amp;quot;); you may only use this Documentation if you comply with the terms of this License. A copy of the License is available at http://www.openoffice.org/licenses/PDL.html.&lt;br /&gt;
The Original Documentation is &amp;quot;Mac OS X native port&amp;quot;. The Initial Writer of the Original Documentation is (JCA) Eric Bachard (C) 2005-2006. All Rights Reserved. (Initial Writer contact(s): ericb@openoffice.org.)&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Mac OS X Native port&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;messagebox cleanup metadata&amp;quot; style=&amp;quot;border:1px solid blue;background-color:#B3FFF5;padding:7px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;The first Mac OS X native port objective is make OpenOffice.org run without X11 use, to make it a real Mac application.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;The second one is respect Aqua Human interface Guidelines&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; This is a long term work, and every help and/or contributions, like donations** are welcome.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 **see http://contributing.openoffice.org/index.html&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Native Port Roadmap&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;2006&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
* June 2006: work in progress &lt;br /&gt;
&lt;br /&gt;
- Basis: frame, instances, threads, drawing, painting, resizing (Stephan Schaefer, Tino Rachui)&lt;br /&gt;
&lt;br /&gt;
 Done: &lt;br /&gt;
 implement threads&lt;br /&gt;
 create, manage instance&lt;br /&gt;
 create, manage windows (including parents)&lt;br /&gt;
 create, manage events&lt;br /&gt;
 create manage drawing, resizing&lt;br /&gt;
 create, add menus (Pavel Janik)&lt;br /&gt;
 toggle window fullscreen (Pierre de Filippis)&lt;br /&gt;
 make font server work (Stephan Schaefer)&lt;br /&gt;
&lt;br /&gt;
* Current status font support (Stephan Schaefer, 2006/07/28): the following features are basically working now&lt;br /&gt;
** font selection&lt;br /&gt;
** font size&lt;br /&gt;
** simple font attributes (bold, italic)&lt;br /&gt;
&lt;br /&gt;
 Next step: document first part, and propose design&lt;br /&gt;
&lt;br /&gt;
- native filepicker (Pavel Janik, Florian Heckl)&lt;br /&gt;
&lt;br /&gt;
- native printing implementation (Oliver?)&lt;br /&gt;
&lt;br /&gt;
- native font implementation (Eric Bachard)&lt;br /&gt;
&lt;br /&gt;
* September 2006: &lt;br /&gt;
&lt;br /&gt;
- first proofs of concept: fonts, filepicker .. (more?)&lt;br /&gt;
- show the results (OOoCon 2006?)&lt;br /&gt;
&lt;br /&gt;
===&amp;#039;&amp;#039;&amp;#039;2007&amp;#039;&amp;#039;&amp;#039;===&lt;br /&gt;
&lt;br /&gt;
* January 2007: first alpha implementation&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Strategy for native port&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Possible Actions&amp;#039;&amp;#039;&amp;#039;: &lt;br /&gt;
&lt;br /&gt;
Identify us:&lt;br /&gt;
&lt;br /&gt;
#Complete the arrays below&lt;br /&gt;
#Update photos on frapr.com?&lt;br /&gt;
&lt;br /&gt;
Share the work:&lt;br /&gt;
&lt;br /&gt;
#Divide the work between little Teams&lt;br /&gt;
#Update Todo list regularly -&amp;gt; needs some love these days ... [http://wiki.services.openoffice.org/wiki/Mac_OS_X_Porting_-_Work_Areas/Todo%27s]&lt;br /&gt;
&lt;br /&gt;
Help:&lt;br /&gt;
&lt;br /&gt;
#Teach tools between us&lt;br /&gt;
#Do a debug party on IRC&lt;br /&gt;
#write documentation&lt;br /&gt;
&lt;br /&gt;
Meet us:&lt;br /&gt;
&lt;br /&gt;
#IRC&lt;br /&gt;
#Mac Meeting (like nov2005 in Hamburg?)&lt;br /&gt;
&lt;br /&gt;
Inform:&lt;br /&gt;
&lt;br /&gt;
#Update website regularly&lt;br /&gt;
#Blogs&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;WHO&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
Mac Team:&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;vertical-align:top; text-align:left; background-color:#efefef;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#d6d6d6;font-weight:bold;&amp;quot; &lt;br /&gt;
|Developer \ skills || build || write code || code review || debug/trace (higher is better) || contribute to documentation ||&lt;br /&gt;
|-&lt;br /&gt;
|ericb|| x || x || || 1 || x ||&lt;br /&gt;
|-&lt;br /&gt;
|pjanik|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|ssa|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|maho|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|tinor|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|schmidtm|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|ebischoff|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|obr|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|cl|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|aliscafo|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|fheckl|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Fridrich|| || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Other resources&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
fonts: ?&lt;br /&gt;
&lt;br /&gt;
events: ?&lt;br /&gt;
&lt;br /&gt;
QA: ?&lt;br /&gt;
&lt;br /&gt;
graphical: ?&lt;br /&gt;
&lt;br /&gt;
Communication: ?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;WHAT&amp;#039;&amp;#039;&amp;#039;: Status of most important tasks&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;vertical-align:top; text-align:left; background-color:#efefef;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#d6d6d6;font-weight:bold;&amp;quot; &lt;br /&gt;
| Task || Names|| Urgency (1=higher)|| Work in Progress || Done || Code review || Debug || Integration || &lt;br /&gt;
|-&lt;br /&gt;
|Get rid of X11||done || 1 || x || x || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Bundle|| || 1 || x || || || || | ||&lt;br /&gt;
|-&lt;br /&gt;
|Drawing|| || 1 || x || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Fonts|| || 1 || x || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Events management|| || 2 || x || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Controls (see list) ||ericb, aliscafo || 2 || x || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Native FilePicker||Florian Heckl, Pavel Janik || 3 || x || x || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Native Printing||Yvan Barthelemy || 3 || x || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Native SpellChecker|| || 4 || || || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
|Player||Mox Soini || 4 || x || || || || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Other tasks:&lt;br /&gt;
&lt;br /&gt;
Help for writing bug lists, status of bugs ..etc&lt;br /&gt;
&lt;br /&gt;
Write howto use gdb, leaks, other tools&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;WHEN&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
From Christian Lippka (last meeting, 25th of august 2006): &lt;br /&gt;
 Aug 26 00:21:38 ChristianL&lt;br /&gt;
 from my point of view what is missing for point 1:&lt;br /&gt;
 text layout, complete font support, keyboard support,&lt;br /&gt;
 fixing repaint issues, having aqua install and run out of the box&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;September 2006&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Present the current state of the project at the 2006 OpenOffice conference in Lyon and Paris&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Late 2006&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
fix OpenOffice.org launch&lt;br /&gt;
fix drawing (repainting)&lt;br /&gt;
Implement missing methods and fix most important bugs (mainly the one leading to crash) in:&lt;br /&gt;
ATS&lt;br /&gt;
Salgraphics&lt;br /&gt;
Salinstance&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;January or February 2007&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
make Java work (works partially)&lt;br /&gt;
make intensive debug&lt;br /&gt;
present something working as alpha&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;June 2007	&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Implementation of:&lt;br /&gt;
native filepicker&lt;br /&gt;
native printing&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;2nd Mac porters meeting&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
This section has been moved to [[2nd Mac porters meeting]]&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;IRC Mac port meetings&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
This section has been moved to [[MacOSXPortMeetings]].&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Mac OS X (X11) Quality Assurance&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
This section has been moved to [[Mac OS X ( X11) Quality Assurance]]&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Debug OpenOffice.org using XCode &amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
[[ MacOSX Debug OpenOffice.org using XCode]]&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Description of the Native Port problem&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
=== How does OpenOffice.org work on Mac OS X? ===&lt;br /&gt;
&lt;br /&gt;
Currently, on Mac OS X, OpenOffice.org uses X11, as &amp;quot;client&amp;quot;: X11 is a graphical server, coming from Unix world, and able to run under Linux, *BSD, Solaris, Mac OS X.&lt;br /&gt;
&lt;br /&gt;
 - X11 is run as an application, managed like other Apple applications.&lt;br /&gt;
 - All unix like applications are managed by X11, and from Aqua environment, only X11 is seen as only one applicatiion, &lt;br /&gt;
  even if other Unix/Linux (e.g.) applications are runing.&lt;br /&gt;
&lt;br /&gt;
OpenOffice.org asks X11 to display a window, waits for X11 acknowledgment, and OpenOffice.org displays the window. All transactions use the network, locally or not. the same mechanism is used for everything to be displayed.&lt;br /&gt;
&lt;br /&gt;
[[User:Ericb|Ericb]] 11:39, 3 June 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
=== Issues and known problems ===&lt;br /&gt;
&lt;br /&gt;
All events are managed by OpenOffice.org and X11, using the Xlib&lt;br /&gt;
&lt;br /&gt;
Only .ttf fonts type is currently available. Note: &amp;#039;&amp;#039;&amp;#039;system fonts are available &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
The rendering is made by X11, not by Mac OS X rendering engine.&lt;br /&gt;
&lt;br /&gt;
X11 and all its clients are seen as one application only: drag and drop protocol does not work because of that (solution: Pasteboard Manager)&lt;br /&gt;
&lt;br /&gt;
==== Other links ====&lt;br /&gt;
&lt;br /&gt;
http://wiki.services.openoffice.org/wiki/List_of_OpenOffice.org_Mac_OS_X_issues_and_problems#&lt;br /&gt;
&lt;br /&gt;
http://wiki.services.openoffice.org/wiki/Printing_problems_with_OpenOffice.org_2.0_for_Mac_OS_X#Reporting_printing_problems&lt;br /&gt;
&lt;br /&gt;
[[User:Ericb|Ericb]] 11:39, 3 June 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
== What do we have to do?==&lt;br /&gt;
&lt;br /&gt;
* Implement direct access to Apple graphical engine, using Apple API: Quartz2D/CoreGraphics (and replacing Xlib use)&lt;br /&gt;
&lt;br /&gt;
like: instantiate, manage events and threads for a graphical instance + all needed objects, drawing: manage all drawing cases&lt;br /&gt;
&lt;br /&gt;
* Implement native events management, using CarbonEventManager (replacing Xlib management)&lt;br /&gt;
&lt;br /&gt;
* Implement native font use, using Apple Type Server and ATSUI (for Unicode Imagery) (replacing X11 management)&lt;br /&gt;
&lt;br /&gt;
Work in progress: http://wiki.services.openoffice.org/wiki/Fonts_starting_point_and_documentation&lt;br /&gt;
&lt;br /&gt;
* Implement native sound, using QuickTime (replacing Java Media Framework): [[Mac OS X Porting - Native Audio and Video]]&lt;br /&gt;
&lt;br /&gt;
* Implement native Drag and drop, Implementing Pasteboard Manager: [[Mac OS X Porting - Native Drag and drop]]&lt;br /&gt;
&lt;br /&gt;
* Implement Native Filepicker&lt;br /&gt;
&lt;br /&gt;
* Implement Native Printing: current uses cups, but native printing is mandatory: [[Mac OS X Porting - Native_Printing]]&lt;br /&gt;
&lt;br /&gt;
* Implement Apple Spellchecker&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Where is located the code to be modified?&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
Most of the changes are located in vcl (Visual Class Layer), for everything graphical, events, fonts, rendering and printing.&lt;br /&gt;
&lt;br /&gt;
Other, for sound and movies will be in avmedia (where the player is implemented in OpenOffice.org sources).&lt;br /&gt;
&lt;br /&gt;
For drag and drop, dtrans is concerned (Pasteboard Manager implementation)&lt;br /&gt;
&lt;br /&gt;
[FIXME]: Filepicker? Apple Spellchecker?&lt;br /&gt;
&lt;br /&gt;
[[User:Ericb|Ericb]] 11:39, 3 June 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;How will the new implementation be tested?==&lt;br /&gt;
&lt;br /&gt;
Currently, all openOffice.org code can be compiled without using the Xlib. but of course, a lot of features are missing,&lt;br /&gt;
&lt;br /&gt;
and the final package simply won&amp;#039;t work&lt;br /&gt;
&lt;br /&gt;
In vcl module&amp;quot;, a &amp;#039;&amp;#039;&amp;#039;toy&amp;#039;&amp;#039;&amp;#039; called svdem is built at buildtime. This binary is linked to libvcl* and so all new stuff can be tested.&lt;br /&gt;
&lt;br /&gt;
e.g. : draw anti-aliased lines works well. &lt;br /&gt;
&lt;br /&gt;
Everything implemented in aqua vcl code will be included in libvclplug_aqua, and svdem source code will contain a specific part to proceed tests.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;messagebox cleanup metadata&amp;quot; style=&amp;quot;border:1px solid blue;background-color:#B3FFF5;padding:7px;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;The magic is: when all needed features will work with svdem, it will work in the new version of OpenOffice.org !!&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[FIXME]: add more complete list of features to implement and test.&lt;br /&gt;
&lt;br /&gt;
== AquaVCL 01 cws ==&lt;br /&gt;
&lt;br /&gt;
[[http://qa.openoffice.org/issues/buglist.cgi?keywords=aqua Top 10 of Aqua issues]]&lt;br /&gt;
&lt;br /&gt;
[[Aquavcl01 tasks]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===recent changes ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Recent Changes &lt;br /&gt;
&lt;br /&gt;
[done] fix nRepeat in text entry  (ssa)&lt;br /&gt;
&lt;br /&gt;
[done] fix missing mouse events  (pjanik)&lt;br /&gt;
&lt;br /&gt;
[done] pushbutton where not correctly drawn (ericb)&lt;br /&gt;
&lt;br /&gt;
[done] fix alpha channel in pixmaps (ismael)&lt;br /&gt;
&lt;br /&gt;
[done] fix correct size for main window (GetOoptimaWindowSize()  ) (ericb)&lt;br /&gt;
&lt;br /&gt;
[done] replace obsolete code in salframe.cxx with (ericb)&lt;br /&gt;
&lt;br /&gt;
[done] add new feature for Aqua windows, to allow QuickTime player use( mox )&lt;br /&gt;
&lt;br /&gt;
[done] add mouse drag events  ( pjanik )&lt;br /&gt;
&lt;br /&gt;
[done] modify libsalsystools.dylib to be correctly loaded with the bundle  (ericb, + pjanik)&lt;br /&gt;
&lt;br /&gt;
[done] implement mapfiles for Mac OS X (Stephan Bergmann, Daniel Boelzle, Tino Rachui , Pavel Janik)&lt;br /&gt;
&lt;br /&gt;
[done] fix scrollbar buttons (implement correct methods to retrieve dimensions)&lt;br /&gt;
&lt;br /&gt;
[done] fix checkbuttons and radiobuttons issues: offsets, redrawing of the check marks ( ericb) &lt;br /&gt;
&lt;br /&gt;
[done, not commited] implement UpdateSettings()   (ericb) &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Work in progress : &lt;br /&gt;
&lt;br /&gt;
Bitmaps : ( isma87) &lt;br /&gt;
&lt;br /&gt;
Crashes : (tino, pjanik, ericb, isma87 )&lt;br /&gt;
&lt;br /&gt;
Drag and drop :   (vijay)&lt;br /&gt;
&lt;br /&gt;
Printing   (ybart)  &lt;br /&gt;
&lt;br /&gt;
Drawing/ windowing  ( tino )&lt;br /&gt;
&lt;br /&gt;
Implement cursor (ericb) &lt;br /&gt;
&lt;br /&gt;
Native Controls  (ericb) &lt;br /&gt;
&lt;br /&gt;
[work in progress] partial multiline sallayout  (plipli )&lt;br /&gt;
&lt;br /&gt;
To do : &lt;br /&gt;
&lt;br /&gt;
(started, Oliver) - modify the tree to make the bundle start without hack ( issue fixed during buildtime) &lt;br /&gt;
&lt;br /&gt;
(started, Florian Heckl)  verify Native FilePicker implementation ( works , tested in Hamburg  )&lt;br /&gt;
&lt;br /&gt;
(started Ismaek Merzaq)  implement blit functions in salgdi  ( important fix:  probably apha version to be tested once done) &lt;br /&gt;
&lt;br /&gt;
( started Sebastien Plisson- update the missing functions list ( fonts ... ask hdu &amp;amp; cl    ) &lt;br /&gt;
&lt;br /&gt;
( started, ericb, Mox Soini, Sebastien Plisson)  continue to replace obsolete code&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
URGENT :&lt;br /&gt;
&lt;br /&gt;
(work in progress) event issue when tips is enabled causes crashes ( well known window / handler  / window desctructor / event loop bug )&lt;br /&gt;
&lt;br /&gt;
fix crashes with menus  (started : tino ) &lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Sort of documentation about VCL around Native Mac OS X port&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Do we really need to understand how it works? ;-)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vcl content:&lt;br /&gt;
&lt;br /&gt;
ls -laR | wc -l&lt;br /&gt;
  1750&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; Uff 1750 files to analyse :-/&lt;br /&gt;
&lt;br /&gt;
Our purpose is to describe the vcl organisation. The content of vcl is so important, that at the begining, the content will looks a bit confused. e.g. class names ..etc have nothing to do, only description with words and sense, but this will need some time before we can understand everything.&lt;br /&gt;
&lt;br /&gt;
How analyse with more efficiency? After some months to anlalyse &amp;#039;&amp;#039;&amp;#039;&amp;quot;horizontaly&amp;quot;&amp;#039;&amp;#039;&amp;#039;, it appears that list all the content of a directory is not the solution. Of course, we learned a lot, but we now have to complete with &amp;#039;&amp;#039;&amp;#039;&amp;quot;orthogonal&amp;quot;&amp;#039;&amp;#039;&amp;#039; method (compared to the previous one). The first method wasn&amp;#039;t obviously not the good/best way to describe vcl.&lt;br /&gt;
 &lt;br /&gt;
[UPDATE] After some investigations, the use of Design patterns seems to be the most efficient approach to describe vcl. Will try to do so asap.&lt;br /&gt;
&lt;br /&gt;
[FIXME] a different approach (will ask confirmation to Philipp Lohman), could be a description of how it work in runtime. First define what an instance is, a frame, and what exactly is concerned by such &amp;quot;objects&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
With that, we can write a list of different objects all using the same scheme: empty boxes (means pure virtual methods and classes in generic libvvcl), really implemented in the specific part, and finally, the API &amp;quot;encapsulated&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The most difficult is to see where the API is used. But for all the parts, this is the same.&lt;br /&gt;
&lt;br /&gt;
Finally, &amp;#039;&amp;#039;&amp;#039;what is important is the design of vcl&amp;#039;&amp;#039;&amp;#039;. Which &amp;#039;&amp;#039;&amp;#039;patterns&amp;#039;&amp;#039;&amp;#039; are used? What are the dependencies, how works the stack for the events, how works the scheduler, the timers too is very important, even fundamental for Aqua implementation. Will have a look at gsl mailing list, and other resources. Probably everything is already (randomly) written somewhere.&lt;br /&gt;
&lt;br /&gt;
=== VCL organisation ===&lt;br /&gt;
&lt;br /&gt;
Thank&amp;#039;s to Philipp Lohmann for this short, but precise description:&lt;br /&gt;
&lt;br /&gt;
Basically vcl is divided in the system dependent and the system independent part. The interface between these two is mostly the Sal interface (every interface name Sal*: SalInstance, SalFrame, SalGraphics, SalPrinter, etc.).&lt;br /&gt;
&lt;br /&gt;
SalInstance is a factory that can create all the other abstracted interfaces of the system dependent part. It also provides the main loop SalInstance::Yield()&lt;br /&gt;
&lt;br /&gt;
SalFrame abstracts any kind of system window.&lt;br /&gt;
&lt;br /&gt;
SalVirtualDevice abstracts an offscreen window (e.g. a Pixmap on X11)&lt;br /&gt;
&lt;br /&gt;
SalPrinter and SalInfoPrinter abstract the system print queues where SalInfoPrinter is for querying and SalPrinter for actual printing.&lt;br /&gt;
&lt;br /&gt;
SalGraphics is an interface produced by either SalFrame, SalVirtualDevice or SalPrinter which is used for actual drawing operations (text, bitmaps, vector graphics)&lt;br /&gt;
&lt;br /&gt;
SalSound is for sound playing.&lt;br /&gt;
&lt;br /&gt;
SalBitmap provides memory for bitmap graphics as well as methods converting this memory to a system handle (e.g. a Pixmap on X11).&lt;br /&gt;
&lt;br /&gt;
SalOpenGL provides OpenGL functionality if available.&lt;br /&gt;
&lt;br /&gt;
SalTimer is an interface for periodically triggering the event queue (to timer implementation).&lt;br /&gt;
&lt;br /&gt;
SalI18NImeStatus handles how the status window of an Input Method Editor (IME) should display (this is mainly X11 specific).&lt;br /&gt;
&lt;br /&gt;
SalSystem has some system specific methods that did not belong anywhere else:-)&lt;br /&gt;
&lt;br /&gt;
Of all these there interfaces is at least one implementation per system (Windows, X11 or Mac). The Unix implementation also has a plugin concept to allow for integration of different native toolkits (currently gtk and Qt) which became necessary for the implementation of Native Widget Framework (NWF) to display controls like their normal desktop counterparts.&lt;br /&gt;
&lt;br /&gt;
Basically the independent part (what is beneath vcl/source directory) has generic methods for drawing, window handling and stuff which it brings into a suitable form and then delegates to the system specific implementation (located beneath vcl/win for Windows and vcl/unx for the X11 platforms).&lt;br /&gt;
&lt;br /&gt;
[[User:Ericb|Ericb]] 16:12, 1 July 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
===Sub-directories description ===&lt;br /&gt;
&lt;br /&gt;
==== &amp;#039;&amp;#039;&amp;#039;Organisation of vcl directories&amp;#039;&amp;#039;&amp;#039; ====&lt;br /&gt;
&lt;br /&gt;
[[Image:aquavcl_organisation_complete_02.jpg]]&lt;br /&gt;
&lt;br /&gt;
==== &amp;#039;&amp;#039;&amp;#039;Directories in vcl. Short description&amp;#039;&amp;#039;&amp;#039; ====&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; aqua &amp;#039;&amp;#039;&amp;#039;: The name Aqua means Apple look and feel, and is well known as [http://developer.apple.com/documentation/UserExperience/Conceptual/OSXHIGuidelines/XHIGIntro/chapter_1_section_1.html Aqua Human Interface Guidelines]. This look and feel means Mac OS X. The work was begun by (probably) P. luby, Dan Williams Herbert Duerr (most of fonts stuff) and Ed Peterlin. Currently in ruin, this directory does contain a lot of ideas to investigate. The most important part of needed changes for native version (3.0) will be done inside aqua dir inc: does contain all vcl relative includes [PART1]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; prj &amp;#039;&amp;#039;&amp;#039;: Does contain build.lst and d.lst build.lst give us dependencies: probably a lot for vcl, build 98th module over ~148. Everything graphical depends in vcl. &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; qa &amp;#039;&amp;#039;&amp;#039; does contain all quality assurancy stuff&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;source&amp;#039;&amp;#039;&amp;#039;: the most important:-) This directory contains common sources for all architectures and OS. Mainly: Windows, Unix: Linux , Mac OS X (X11), Solaris, including generic, kde and gtk plugins, and Aqua (Mac OS X without X11, work currently in progress). &lt;br /&gt;
&lt;br /&gt;
Depending on the OS and the architecture, binaries are built or not.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; test &amp;#039;&amp;#039;&amp;#039;: This directory does contain all the needed stuff for tests. As example, in qa/testdocuments, you&amp;#039;ll find three documents (one writer, one calc and one impress) for tests purpose. &lt;br /&gt;
Other available tests are about memcheck and persistent window state. &lt;br /&gt;
 &lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; unx &amp;#039;&amp;#039;&amp;#039;: this directory does contain all unixes stuff. We have to understand what is inside to implement aqua port. For example, a lot of classes/strutures and objects use Xlib calls we have to replace with Carbon/Cocoa call (at least at first time) for Mac OS X native port.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; win &amp;#039;&amp;#039;&amp;#039;: Doing Mac OS X native port, I first believed this directory was not interesting for us, but I was wrong: OpenOffice.org roots are inside this directory, and a lot of comments and resources are inside. Mainly interesting if Carbon is used.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;workben&amp;#039;&amp;#039;&amp;#039;: Does contain a toy called &amp;quot;svdem&amp;quot;. svdem is a binary, used for new implementations. For example, actual aqua development uses svdem intensively, to verify all important properties we need: &lt;br /&gt;
&lt;br /&gt;
- display a window first (al least ...:)) &lt;br /&gt;
&lt;br /&gt;
- close cleanly this window&lt;br /&gt;
&lt;br /&gt;
- display a point&lt;br /&gt;
&lt;br /&gt;
- trace a line&lt;br /&gt;
&lt;br /&gt;
- trace an area &lt;br /&gt;
&lt;br /&gt;
- superpose two areas doing some important graphical operations, (like xor),&lt;br /&gt;
&lt;br /&gt;
- display a character&lt;br /&gt;
&lt;br /&gt;
- display a menu. &lt;br /&gt;
&lt;br /&gt;
- intercept events correctly.&lt;br /&gt;
&lt;br /&gt;
[FIXME] add more tests&lt;br /&gt;
&lt;br /&gt;
[[User:Ericb|Ericb]] 13:21, 3 June 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Naming convention&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
* Class names start with upper case letters, to improve readability.&lt;br /&gt;
&lt;br /&gt;
* Implemented Class names are derived from the virtual classes but can of course take arbitrary names.&lt;br /&gt;
To increase readability, it&amp;#039;s recommended to closely follow the base class name.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Impl prefix: means Implementation details&amp;#039;&amp;#039;&amp;#039;. The concerned class or method or function is not used outside of this module, so no external code (or other libraries) can see it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[ Events types using Carbon API (Mac OS X): ]]&amp;#039;&amp;#039;&amp;#039; A lot of events have to be managed in runtime. Here is a short description&lt;br /&gt;
&lt;br /&gt;
- do not freeze because bad event loops&lt;br /&gt;
&lt;br /&gt;
- event types implementation: currently, they are defined in vcl/aqua/inc/aquavclevents.hxx&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Apart: exact sense of hedabu? -&amp;gt; [FIXME] as far as I understood it: it is like &amp;quot;copy&amp;quot; to deliver software into the solver, with extra magic. The header files for example are manipulated so paths need not be exact. &amp;quot;headabu&amp;quot; is supposed to disappear little by little.&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;What do we have to build in vcl?&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
Two libraries, corresponding ressources (localized) and a toy so called « svdem »&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Common part&amp;#039;&amp;#039;&amp;#039;: &lt;br /&gt;
&lt;br /&gt;
in grey on right. The result will be a non architecture dependant library, built in all cases: for instance, libvcl680mxi.dylib on Mac Intel.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Specific part  &amp;quot; a plugin &amp;quot; &amp;#039;&amp;#039;&amp;#039;: &lt;br /&gt;
&lt;br /&gt;
Light yellow: aqua part will only concern Mac OS X (non X11) the name will probably be libvcl_aqua680mxi.dylib &lt;br /&gt;
&lt;br /&gt;
As you can see, win means windows part, in blue&lt;br /&gt;
&lt;br /&gt;
For Unix build (Linux, Solaris or current Mac OS X X11), in purple.&lt;br /&gt;
&lt;br /&gt;
Result will be:&lt;br /&gt;
&lt;br /&gt;
libvclplug_PLUGIN680mxi.DLLSUFFIX , where PLUGIN can be iether gen (generic) or gtk (using gtk+) or kde (using qt), and DLLSUFFIX can be either .so (linux) or .dylib (Mac OS X) ...etc (I&amp;#039;m not sure for other cases).&lt;br /&gt;
&lt;br /&gt;
Example: libvcl680mxi.dylib and libvclplug_aqua680mxi.dylib&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;In runtime&amp;#039;&amp;#039;&amp;#039;, libvclplug_aqua will be linked to libvcl680. the first one will contain the real implementation (respecting the API, e.g. Carbon) while the generic libvcl will only contain pure virtual methods ...etc like &amp;quot;empty boxes&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Current Aqua content ===&lt;br /&gt;
&lt;br /&gt;
A more complete description of aqua (Mac OS X / no X11 specific): [[Image:Vcl_aqua_organisation_02_tree.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==EXISTING objects to build in aqua==&lt;br /&gt;
&lt;br /&gt;
===Sal APP &amp;quot;everything application&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
[FIXME] add all objects descriptions&lt;br /&gt;
&lt;br /&gt;
==== saldata ====&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Defined in plugin exclusively&amp;#039;&amp;#039;&amp;#039; (i.e. for headers)&lt;br /&gt;
&lt;br /&gt;
Unix: unx/source/app/saldata.cxx (header in unx/inc)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Aqua: aqua/source/app/saldata.cxx (header in win/inc)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Windows: win/source/app/saldata.cxx (header in aqua/inc)&lt;br /&gt;
&lt;br /&gt;
* Role: saldata contains various kind of data used by the implementation for the concerned platform. &amp;#039;&amp;#039;&amp;#039;It is a bunch of global data collections reserved for the platform&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
It is just completely platform dependent, and nobody except this plugin can see it.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Saldata is something like a &amp;quot;second sal&amp;quot;, but providing an abstraction regarding windowing and graphics&amp;#039;&amp;#039;&amp;#039;, while SAL module provides an abstraction more Operating System oriented) &lt;br /&gt;
&lt;br /&gt;
e.g. : have a look at XRequest array in vcl/unx/source/app/saldata.cxx =&amp;gt; all calls are for Xlib (X11).  Ok, useless there, but interesting:-)&lt;br /&gt;
&lt;br /&gt;
[FIXME]: use Windows implementation could be a good starting point. Nothing is the same, but the current aquavcl cws uses similar objects, and it works very correctly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
saldatax.cxx uses classes SalInstance, SalObject, SalFrame, SalVirtualDevice, SalPrinter and fontList.&lt;br /&gt;
&lt;br /&gt;
Current list of possible objects who can be instantiated/released:&lt;br /&gt;
&lt;br /&gt;
structure SalData: does contain pointers on all kind of objects from other classes used in saldata.&lt;br /&gt;
&lt;br /&gt;
inline functions: [FIXME]: complete the description&lt;br /&gt;
&lt;br /&gt;
- SetSalData:&lt;br /&gt;
- GetSalData:&lt;br /&gt;
- GetAppSalData:&lt;br /&gt;
&lt;br /&gt;
==== salinst ====&lt;br /&gt;
&lt;br /&gt;
=&amp;gt; implemented in vcl/aqua/source/app/salinst.cxx&lt;br /&gt;
&lt;br /&gt;
Role: &lt;br /&gt;
&lt;br /&gt;
* get environment, mutexes, instantiate AquaSalInstance (Ctor, Dtor),&lt;br /&gt;
&lt;br /&gt;
* instantiates/releases a lot of other objects using Get() / CreateObject() / DestroyObject() methods.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Current list of possible objects who can be instantiated/released:&lt;br /&gt;
&lt;br /&gt;
 * VirtualDevice [FIXME]: exact role?&lt;br /&gt;
&lt;br /&gt;
 *Printer  &lt;br /&gt;
&lt;br /&gt;
- GetDefaultPrinter/ CreatePrinter() / DestroyPrinter - what a name ;-) -&lt;br /&gt;
&lt;br /&gt;
- InfoPrinter (Get/Create/Delete)&lt;br /&gt;
&lt;br /&gt;
- PrinterQueue (DeletePrinterQueueInfo / GetPrinterQueueInfo / GetPrinterQueueState)&lt;br /&gt;
&lt;br /&gt;
 * System (Create / Delete) [FIXME]: what means system here?&lt;br /&gt;
&lt;br /&gt;
 * Events: &lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::SetEventCallback()&lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::SetErrorEvenCallback()&lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::GetConnectionIdentifier()&lt;br /&gt;
&lt;br /&gt;
 * Menu / MenuItem: &lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::CreateMenu() / same for DestroyMenu()&lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::CreateMenuItem / same DestroyMenuItem()&lt;br /&gt;
&lt;br /&gt;
 * Sound: &lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::CreateSalSound()  =&amp;gt; object to a pointer of SalSound type&lt;br /&gt;
&lt;br /&gt;
Note: AquaSalInstance::DestroySalSound is not implemented (?)&lt;br /&gt;
&lt;br /&gt;
 * Timer: CreateTimer() /&lt;br /&gt;
&lt;br /&gt;
AquaSalInstance:: DestroyTimer() is not yet implemented (?)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Class MacImeStatus: inherits of SalI18NImeStatus&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; only there to see if there is a window to toggle into menubar [FIXME]??&lt;br /&gt;
&lt;br /&gt;
AquaSalInstance::CreateI18NImeStatus(): instantiates MacImeStatus&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;For futher informations, see: &amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;[[Content of salinst.cxx]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
([[User:Ericb|Ericb]] 16:11, 20 May 2006 (CEST) )&lt;br /&gt;
&lt;br /&gt;
==== salmain ====&lt;br /&gt;
&lt;br /&gt;
Role: if possible, runs the standard vcl application code SVMain()&lt;br /&gt;
&lt;br /&gt;
([[User:Ericb|Ericb]] 16:15, 20 May 2006 (CEST))&lt;br /&gt;
&lt;br /&gt;
==== salsound ====&lt;br /&gt;
&lt;br /&gt;
==== salsys ====&lt;br /&gt;
&lt;br /&gt;
==== saltimer ====&lt;br /&gt;
&lt;br /&gt;
=== Sal GDI (everything Graphical Display Interface) ===&lt;br /&gt;
&lt;br /&gt;
====salgdinativewidgets====&lt;br /&gt;
&lt;br /&gt;
[[native controls]]&lt;br /&gt;
&lt;br /&gt;
==== salatslayout ====&lt;br /&gt;
&lt;br /&gt;
==&amp;gt; implemented in vcl/aqua/source/gdi/salatslayout.cxx&lt;br /&gt;
&lt;br /&gt;
- Handle text layouting :&lt;br /&gt;
&lt;br /&gt;
    * Use ATSUI (ATSUCreateTextLayoutFromPtr) to layout the text unicode char buffer&lt;br /&gt;
    * Use ATSUI (ATSU..) to get informations about glyphs&lt;br /&gt;
    * Populate different arrays (mpGlyph2Chars, mpChars2Glyph, mpCharsWidths, mpGlyphAdvances)&lt;br /&gt;
      that are used in various methods.&lt;br /&gt;
&lt;br /&gt;
==== salatsuiutils ====&lt;br /&gt;
&lt;br /&gt;
==== salfontutils ====&lt;br /&gt;
&lt;br /&gt;
==== salmathutils ====&lt;br /&gt;
&lt;br /&gt;
==== sal bmp ====&lt;br /&gt;
&lt;br /&gt;
==== salvd ====&lt;br /&gt;
&lt;br /&gt;
==== salframe ====&lt;br /&gt;
&lt;br /&gt;
==== salpixmaputils====&lt;br /&gt;
&lt;br /&gt;
==== salprn ====&lt;br /&gt;
&lt;br /&gt;
====salrectangle====&lt;br /&gt;
&lt;br /&gt;
==== salvd ====&lt;br /&gt;
&lt;br /&gt;
=== Sal Window===&lt;br /&gt;
&lt;br /&gt;
==== salframe ====&lt;br /&gt;
&lt;br /&gt;
====salobj====&lt;br /&gt;
&lt;br /&gt;
== TO BE IMPLEMENTED (missing in Aqua)==&lt;br /&gt;
&lt;br /&gt;
===Audio===&lt;br /&gt;
&lt;br /&gt;
====audioconvert====&lt;br /&gt;
 (obsolete?) &lt;br /&gt;
&lt;br /&gt;
====devaudio====&lt;br /&gt;
(obsolete?)&lt;br /&gt;
&lt;br /&gt;
====native sound====&lt;br /&gt;
&lt;br /&gt;
====salimpsound====&lt;br /&gt;
&lt;br /&gt;
====vsound====&lt;br /&gt;
&lt;br /&gt;
===i18n===&lt;br /&gt;
&lt;br /&gt;
===keysymnames===&lt;br /&gt;
&lt;br /&gt;
===saldisp===&lt;br /&gt;
&lt;br /&gt;
===sm===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[FIXME]: is session manager usefull?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==&amp;#039;&amp;#039;&amp;#039;Native Controls&amp;#039;&amp;#039;&amp;#039;==&lt;br /&gt;
&lt;br /&gt;
====Scrollbar====&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Works as expected&amp;#039;&amp;#039;&amp;#039;. The most important work is done&lt;br /&gt;
&lt;br /&gt;
See : [[Mac_OS_X_Porting_-_Native_Controls#ScrollBar]]&lt;br /&gt;
&lt;br /&gt;
====DrawThemeButton() documentation====&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Started&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
See : [[Mac_OS_X_Porting_-_Native_Controls#ComboBox]]&lt;br /&gt;
&lt;br /&gt;
Started&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DrawThemeButton&lt;br /&gt;
Draws a button.&lt;br /&gt;
&lt;br /&gt;
OSStatus DrawThemeButton (&lt;br /&gt;
   const Rect * inBounds,&lt;br /&gt;
   ThemeButtonKind inKind,&lt;br /&gt;
   const ThemeButtonDrawInfo * inNewInfo,&lt;br /&gt;
   const ThemeButtonDrawInfo * inPrevInfo,&lt;br /&gt;
   ThemeEraseUPP inEraseProc,&lt;br /&gt;
   ThemeButtonDrawUPP inLabelProc,&lt;br /&gt;
   UInt32 inUserData&lt;br /&gt;
);&lt;br /&gt;
Parameters&lt;br /&gt;
inBounds&lt;br /&gt;
A pointer to a structure of type Rect. Pass a rectangle specifying the boundary of the button, in local coordinates.&lt;br /&gt;
&lt;br /&gt;
inKind&lt;br /&gt;
A value of type ThemeButtonKind. Pass a constant specifying the type of button to draw. &lt;br /&gt;
See “Theme Buttons” for descriptions of possible values.&lt;br /&gt;
&lt;br /&gt;
inNewInfo&lt;br /&gt;
A pointer to a structure of type ThemeButtonDrawInfo. Before calling DrawThemeButton, &lt;br /&gt;
set the structure to contain the new state, value, and adornment for the button. &lt;br /&gt;
DrawThemeButton uses the information passed in the inNewInfo and inPrevInfo parameters&lt;br /&gt;
to apply transitional animation or sound effects as the button state changes, if such are &lt;br /&gt;
specified under the current theme.&lt;br /&gt;
&lt;br /&gt;
inPrevInfo&lt;br /&gt;
A pointer to a structure of type ThemeButtonDrawInfo. If the button state is changing,&lt;br /&gt;
set the structure to contain the previous state, value, and adornment for the button, &lt;br /&gt;
to allow DrawThemeButton to apply any transitional effects. If the button state is not &lt;br /&gt;
changing, you can pass NULL.&lt;br /&gt;
&lt;br /&gt;
inEraseProc&lt;br /&gt;
A value of type ThemeEraseUPP. If you have a custom background, use this parameter to pass&lt;br /&gt;
a universal function pointer to an application-defined function such as that described in &lt;br /&gt;
ThemeEraseProcPtr. DrawThemeButton calls this function to erase the background before drawing&lt;br /&gt;
 the button. If you pass NULL, DrawThemeButton&amp;#039;s default behavior is to erase the background&lt;br /&gt;
 for you.&lt;br /&gt;
&lt;br /&gt;
inLabelProc&lt;br /&gt;
A value of type ThemeButtonDrawUPP. If you pass a universal function pointer to an &lt;br /&gt;
application-defined function such as that described in ThemeButtonDrawProcPtr, DrawThemeButton&lt;br /&gt;
 calls that function to draw the label of the button. If you pass NULL, no label is drawn.&lt;br /&gt;
&lt;br /&gt;
inUserData&lt;br /&gt;
An unsigned 32-bit integer. Provide any data to be passed in to the callback functions specified in &lt;br /&gt;
the inLabelProc and inEraseProc parameters. Pass NULL if you do not wish to provide any data.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
A result code. See “Appearance Manager Result Codes”.&lt;br /&gt;
&lt;br /&gt;
Discussion&lt;br /&gt;
The DrawThemeButton function draws a theme-compliant button. If a ThemeEraseProcPtr is &lt;br /&gt;
specified in the inEraseProc parameter, DrawThemeButton uses that function to erase the &lt;br /&gt;
background of the button before drawing the button. After the button is drawn, if a&lt;br /&gt;
ThemeButtonDrawProcPtr is specified in the inLabelProc parameter, DrawThemeButton calls&lt;br /&gt;
that function to draw the button’s label.&lt;br /&gt;
&lt;br /&gt;
Note that DrawThemeButton also draws any appearance adornments for the button and that these&lt;br /&gt;
can extend beyond the button’s basic bounding rectangle, as specified in the inBounds parameter,&lt;br /&gt;
and may be of variable shape. You may therefore wish to call the function&lt;br /&gt;
GetThemeButtonBackgroundBounds to obtain the actual rectangle containing the pixels belonging&lt;br /&gt;
to a button under the current theme.&lt;br /&gt;
&lt;br /&gt;
Version Notes&lt;br /&gt;
This function is available with Appearance Manager 1.1 and later.&lt;br /&gt;
&lt;br /&gt;
Availability&lt;br /&gt;
Available in CarbonLib 1.0 and later when Appearance 1.1 or later is present.&lt;br /&gt;
Available in Mac OS X 10.0 and later.&lt;br /&gt;
Declared In&lt;br /&gt;
Appearance.h&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====HIComboBoxCreate() documentation====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HIComboBoxCreate&lt;br /&gt;
Creates a combo box control.&lt;br /&gt;
&lt;br /&gt;
OSStatus HIComboBoxCreate (&lt;br /&gt;
   const HIRect* boundsRect,&lt;br /&gt;
   CFStringRef text,&lt;br /&gt;
   const ControlFontStyleRec* style,&lt;br /&gt;
   CFArrayRef list,&lt;br /&gt;
   OptionBits inAttributes,&lt;br /&gt;
   HIViewRef* outComboBox&lt;br /&gt;
);&lt;br /&gt;
Parameters&lt;br /&gt;
boundsRect&lt;br /&gt;
The bounding box of the control.&lt;br /&gt;
&lt;br /&gt;
text&lt;br /&gt;
The default text in the editable portion of the control. Can be NULL.&lt;br /&gt;
&lt;br /&gt;
style&lt;br /&gt;
The font style of the both editable text and the text in the disclosure list. Can be NULL.&lt;br /&gt;
&lt;br /&gt;
list&lt;br /&gt;
The default values available in the disclosure list. Can be NULL.&lt;br /&gt;
&lt;br /&gt;
inAttributes&lt;br /&gt;
The default attributes of the combo box. For possible values, see “Combo Box Attributes”.&lt;br /&gt;
&lt;br /&gt;
outComboBox&lt;br /&gt;
On exit, a pointer to a reference for the new control.&lt;br /&gt;
&lt;br /&gt;
Discussion&lt;br /&gt;
The combo box can be used in compositing mode, as well as traditional Control Manager mode.&lt;br /&gt;
When created, this view is invisible. To see the view, you must show the view by calling HIViewSetVisible.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== What is used for Linux, Windows, Mac OS X ...build ? ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[Description of the dependencies]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[Windows]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[MacOS X]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[Linux]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[Solaris]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Content of Aqua ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[Click here to see the complete list]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Content of vcl/inc&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Notes: &lt;br /&gt;
&lt;br /&gt;
1) Where to find includes&lt;br /&gt;
&lt;br /&gt;
&amp;lt;foo/bar.hxx&amp;gt; means you can find bar.hxx in the foo module. The new style file is foo/inc/foo/bar.hxx, old style is foo/inc/bar.hxx and sometimes the file is somewhere else in the tree or generated. The deliver process copies/generates the file into solver at solver/680/build_type/inc/foo. Good for fixing broken builds. ;-)&lt;br /&gt;
&lt;br /&gt;
2) &lt;br /&gt;
suffix .h (for C calls or first version?) or .hxx (C++) &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;A) Family of includes&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
Looking more closely at the list brings to the fore (expression from dictionary ;-) ) that include names are&lt;br /&gt;
informatives. Most of the time, the name gives the function/role.&lt;br /&gt;
What is interesting is the files with name begining with &amp;quot;sal&amp;quot;. sal means System Abstraction Layer + include&amp;#039;s function (or explicit name). &lt;br /&gt;
&lt;br /&gt;
Partial list, for example:&lt;br /&gt;
&lt;br /&gt;
salatype.hxx&lt;br /&gt;
&lt;br /&gt;
salbmp.hxx&lt;br /&gt;
&lt;br /&gt;
salctrlhandle.hxx&lt;br /&gt;
&lt;br /&gt;
salctype.hxx&lt;br /&gt;
&lt;br /&gt;
salframe.hxx&lt;br /&gt;
&lt;br /&gt;
salgdi.hxx&lt;br /&gt;
&lt;br /&gt;
salgeom.hxx&lt;br /&gt;
&lt;br /&gt;
sallayout.hxx (main header for fonts services)&lt;br /&gt;
...&lt;br /&gt;
salmenu&lt;br /&gt;
salnativewidgets&lt;br /&gt;
...etc&lt;br /&gt;
&lt;br /&gt;
Other important families are &amp;quot;sv&amp;quot; and &amp;quot;uno&amp;quot; or &amp;quot;win&amp;quot; (window) prefixed. sal family will be analysed apart.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;B) Includes of includes&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Some includes are more important than other. To prove this, just have a look is sufficient: some are always needed, and some more rarely.&lt;br /&gt;
&lt;br /&gt;
To verify, a simple test to do in vcl/inc:&lt;br /&gt;
&lt;br /&gt;
egrep -H &amp;quot;#include&amp;quot; ./* | wc -l  gives me 681 lines ! And some of them are the same...&lt;br /&gt;
&lt;br /&gt;
To know more, the precedent command line can be modified to make appear the numerous call &lt;br /&gt;
to the same includes files.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
egrep -H &amp;quot;#include&amp;quot; ./* | cut -d&amp;quot;#&amp;quot; -f2 | sort &amp;gt; liste.txt&lt;br /&gt;
&lt;br /&gt;
The content of liste.txt is explicit: dllapi.h, sv.h and some other are very important, while some other includes are only one or two times used. We can see too that vos includes are numerous, even if vos is deprecated**&lt;br /&gt;
&lt;br /&gt;
 **see http://wiki.services.openoffice.org/wiki/Source_code_directories&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I&amp;#039;m nearly sure that a complete analysis of just this result will give us a lot of information.&lt;br /&gt;
&lt;br /&gt;
I propose to change the order of analysis starting with dllapi.h and sv.h.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[to be continued]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;B1) &amp;quot;sal&amp;quot; includes family&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
[[salinst.hxx]] This seems to be the main include file&lt;br /&gt;
&lt;br /&gt;
[[salatype.hxx]]&lt;br /&gt;
&lt;br /&gt;
[[salctrlhandle.hxx]]&lt;br /&gt;
&lt;br /&gt;
[[salctype.hxx]]&lt;br /&gt;
&lt;br /&gt;
[[salframe.hxx]]&lt;br /&gt;
&lt;br /&gt;
[[salgdi.hxx]]&lt;br /&gt;
&lt;br /&gt;
[[salgeom.hxx]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[ sallayout.hxx ]]&amp;#039;&amp;#039;&amp;#039; &amp;lt;-- see Native Fonts implementation&lt;br /&gt;
&lt;br /&gt;
[[salgtype.hxx]]&lt;br /&gt;
&lt;br /&gt;
[[vcl/inc/salobj.hxx]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;B2) Classicals includes&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
file: abstdlg.hxx [ means abstract dialog ]&lt;br /&gt;
&lt;br /&gt;
This includes does contain the following classes definitions:&lt;br /&gt;
&lt;br /&gt;
[FIXME] : choose a precise presentation template for classes &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
VclAbstractDialog,&lt;br /&gt;
&lt;br /&gt;
VclAbstractTerminateDialog, &lt;br /&gt;
&lt;br /&gt;
VclAbstractRefreshableDialog,&lt;br /&gt;
 &lt;br /&gt;
VclAbstractDialogFactory, &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
uses &amp;lt;tools/solar.h&amp;gt; , &amp;lt;tools/string.hxx&amp;gt; + &lt;br /&gt;
&lt;br /&gt;
&amp;quot;dllapi.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Note : dllapi.h is very interesting because when we have to find (for example) a library suffix, SAL_DLLEXTENSSION can replace all suffixes (every OS&amp;#039;s and archs). Just including sal/config.h does it ! &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Classes:&lt;br /&gt;
&lt;br /&gt;
Window -&amp;gt; what? [FIXME]&lt;br /&gt;
ResId -&amp;gt; what?&lt;br /&gt;
&lt;br /&gt;
Does contain the prototype of VclAbstractDialog, inherit of VCL_DLLPUBLIC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
file: dllapi.h [ dll for dynamic linked library ]&lt;br /&gt;
Uses: &amp;lt;sal/config.h&amp;gt; and &amp;gt;sal/types/h&amp;gt;&lt;br /&gt;
includes: VCL_DLLPUBLIC macro&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
file: accel.h [ means accelerator ]&lt;br /&gt;
&lt;br /&gt;
Classes:&lt;br /&gt;
&lt;br /&gt;
Accelerator &lt;br /&gt;
{&lt;br /&gt;
}&lt;br /&gt;
ImplAccelEntry &lt;br /&gt;
{&lt;br /&gt;
public members: &lt;br /&gt;
&lt;br /&gt;
Names&lt;br /&gt;
&lt;br /&gt;
mnId&lt;br /&gt;
maKeyCode&lt;br /&gt;
mpAccel&lt;br /&gt;
mpAutoAccel&lt;br /&gt;
mbEnabled&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function / returns / parameters&lt;br /&gt;
&lt;br /&gt;
ImplGetKeyCode / void / KeyFuncType eFunc, ref rCode1 , ref rCode2, ref rCode3&lt;br /&gt;
&lt;br /&gt;
file: accel.hxx &lt;br /&gt;
&lt;br /&gt;
Uses: &amp;lt;sv.h&amp;gt; , &amp;quot;dllapi.h&amp;quot; ,&amp;lt;tools/resid.hxx&amp;gt;, &amp;lt;&amp;lt;tools/rc.hxx&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Classes:&lt;br /&gt;
&lt;br /&gt;
ImplAccelData;&lt;br /&gt;
ImplAccelEntry;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Important Links ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[[Progressive implementation]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Native Font server Implementation&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;[[Fonts starting point and documentation]]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Native Sound Implementation&amp;#039;&amp;#039;&amp;#039;: [[Mac OS X Porting - Native Audio and Video]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Native Printing Implementation&amp;#039;&amp;#039;&amp;#039;: [[Mac OS X Porting - Native_Printing]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Drag and Drop implementation&amp;#039;&amp;#039;&amp;#039;: [[Mac OS X Porting - Native Drag and drop]]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Data Acquisition&amp;#039;&amp;#039;&amp;#039; : [[Mac OS X Porting - Data Acquisition]]&lt;br /&gt;
&lt;br /&gt;
This work is part of http://wiki.services.openoffice.org/wiki/Mac_OS_X_Porting_-_Work_Areas/Todo%27s&lt;br /&gt;
&lt;br /&gt;
[to be continued:-) ]&lt;br /&gt;
&lt;br /&gt;
== Keyboard comparizon between OpenOffice.org / Mac OS X  application ==&lt;br /&gt;
&lt;br /&gt;
[FIXME] redo a cleanest array &lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;vertical-align:top; text-align:centered; background-color:#F0F0F0;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;background-color:#99CCFF; font-weight:bold;&amp;quot; &lt;br /&gt;
| Modifier||+ key  || Result || TextEdit  returns&lt;br /&gt;
|-&lt;br /&gt;
|ALT|| a||æ ||æ &lt;br /&gt;
|-&lt;br /&gt;
|ALT||b||ß ||ß&lt;br /&gt;
|-&lt;br /&gt;
|ALT||c||© ||©&lt;br /&gt;
|-&lt;br /&gt;
|ALT||d||∂ ||∂&lt;br /&gt;
|-&lt;br /&gt;
|ALT||e||ê ||ê&lt;br /&gt;
|-&lt;br /&gt;
|ALT||f||ƒ ||ƒ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||g ||ﬁ ||ﬁ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||h ||Ì ||Ì&lt;br /&gt;
|-&lt;br /&gt;
|ALT||i ||î ||î&lt;br /&gt;
|-&lt;br /&gt;
|ALT||j ||Ï ||Ï&lt;br /&gt;
|-&lt;br /&gt;
|ALT||k ||È ||È&lt;br /&gt;
|-&lt;br /&gt;
|ALT||l ||¬ ||¬&lt;br /&gt;
|-&lt;br /&gt;
|ALT||m ||µ ||µ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||n ||~ ||~&lt;br /&gt;
|-&lt;br /&gt;
|ALT||o ||œ ||œ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||p ||π ||π&lt;br /&gt;
|-&lt;br /&gt;
|ALT||q ||‡ ||‡&lt;br /&gt;
|-&lt;br /&gt;
|ALT||r ||® ||®&lt;br /&gt;
|-&lt;br /&gt;
|ALT||s ||Ò ||Ò&lt;br /&gt;
|-&lt;br /&gt;
|ALT||t ||† ||†&lt;br /&gt;
|-&lt;br /&gt;
|ALT||u ||º ||º&lt;br /&gt;
|-&lt;br /&gt;
|ALT||v ||◊ ||◊&lt;br /&gt;
|-&lt;br /&gt;
|ALT||w ||‹ ||‹&lt;br /&gt;
|-&lt;br /&gt;
|ALT||x ||≈ ||≈&lt;br /&gt;
|-&lt;br /&gt;
|ALT||y ||Ú ||Ú&lt;br /&gt;
|-&lt;br /&gt;
|ALT||z ||Â ||Â&lt;br /&gt;
|-&lt;br /&gt;
|ALT||A ||Æ ||Æ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||B ||∫ ||∫&lt;br /&gt;
|-&lt;br /&gt;
|ALT||C ||¢ ||¢&lt;br /&gt;
|-&lt;br /&gt;
|ALT||D||∆||∆&lt;br /&gt;
|-&lt;br /&gt;
|ALT||F ||· ||·&lt;br /&gt;
|-&lt;br /&gt;
|ALT||G ||ﬂ ||ﬂ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||H ||Î ||Î&lt;br /&gt;
|-&lt;br /&gt;
|ALT||I ||Î ||Î&lt;br /&gt;
|-&lt;br /&gt;
|ALT||J ||Í ||Í&lt;br /&gt;
|-&lt;br /&gt;
|ALT||K ||Ë ||Ë&lt;br /&gt;
|-&lt;br /&gt;
|ALT||L || &amp;lt;pre&amp;gt;|&amp;lt;/pre&amp;gt; ||&amp;lt;pre&amp;gt;|&amp;lt;/pre&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|ALT||M ||Ó ||Ó&lt;br /&gt;
|-&lt;br /&gt;
|ALT||N ||ı ||ı&lt;br /&gt;
|-&lt;br /&gt;
|ALT||O ||Œ ||Œ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||P ||∏ ||∏&lt;br /&gt;
|-&lt;br /&gt;
|ALT||Q ||Ω ||Ω&lt;br /&gt;
|-&lt;br /&gt;
|ALT||R ||‚ ||‚&lt;br /&gt;
|-&lt;br /&gt;
|ALT||S ||∑ ||∑&lt;br /&gt;
|-&lt;br /&gt;
|ALT||T ||™ ||™&lt;br /&gt;
|-&lt;br /&gt;
|ALT||U ||ª ||ª&lt;br /&gt;
|-&lt;br /&gt;
|ALT||V ||√ ||√&lt;br /&gt;
|-&lt;br /&gt;
|ALT||W ||› ||›&lt;br /&gt;
|-&lt;br /&gt;
|ALT||X ||⁄ ||⁄&lt;br /&gt;
|-&lt;br /&gt;
|ALT||Y ||Ÿ ||Ÿ&lt;br /&gt;
|-&lt;br /&gt;
|ALT||Z ||Å ||Å&lt;br /&gt;
|-&lt;br /&gt;
|ALT||$ ||€ ||€&lt;br /&gt;
|-&lt;br /&gt;
|ALT||` ||@ ||@&lt;br /&gt;
|-&lt;br /&gt;
|ALT||£ ||# ||#&lt;br /&gt;
|-&lt;br /&gt;
|ALT||* ||¥ ||¥&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Sous réserve d&amp;#039;erreur ou omission [[User:Ericb|Ericb]] 00:05, 14 January 2007 (CET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[User:Ericb|Ericb]] 15:00, 22 Jul 2005 (EDT)&lt;br /&gt;
&lt;br /&gt;
[[Category:Porting]]&lt;br /&gt;
[[Category:MacOSX]]&lt;br /&gt;
[[Category:Aqua]]&lt;/div&gt;</summary>
		<author><name>Plipli</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Documentation/Building_Guide/Building_on_MacOSX&amp;diff=24834</id>
		<title>Documentation/Building Guide/Building on MacOSX</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Documentation/Building_Guide/Building_on_MacOSX&amp;diff=24834"/>
		<updated>2007-02-10T05:48:11Z</updated>

		<summary type="html">&lt;p&gt;Plipli: /* &amp;#039;&amp;#039;&amp;#039;List of Patches requiring testing before for integration&amp;#039;&amp;#039;&amp;#039; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;&amp;#039;&amp;#039;&amp;#039;This document tries to wrap-up the build process for [[OpenOffice.org]] on MacOS X using the native windowing-toolkit of the platform named Aqua.&amp;#039;&amp;#039;&amp;#039; &amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An important goal is to get the demonstration programs &amp;quot;svdem&amp;quot; up and running. They act as a fairly good starting point to further endeavours, since they are used to test the capabilities of the underlying [[VCL]] layer. If this is achieved, one can build and Install the full-fledged OpenOffice.org Package. The purpose of this document is to describe the cumbersome build process of OpenOffice.org rather than to give a kickstart in the coding involved to get VCL ported to Carbon. A starting point for this is Pierre de Filippis excellent [[Intro To Mac Porting]].&lt;br /&gt;
&lt;br /&gt;
I use the bash shell in all examples, since to my belief users of the C-shell are smart enough to figure out the differences anyway. If you want to dig deeper into the build process, please have a look at the description of the build environment here: [http://tools.openoffice.org/build_env.html Open OfficeBuild Environment].&lt;br /&gt;
&lt;br /&gt;
Many thanks for help and assistance go to Pavel Janik and Eric Bachard.&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Prerequisites&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
This document was derived from the description of the X11 build thanksworthy provided by Eric Hoch in this document: [[MacOSXBuildInstructions]]. Here I like to outline the things you need to build the Aqua Version (besides the OS). &lt;br /&gt;
&lt;br /&gt;
=== Mandatory ===&lt;br /&gt;
&lt;br /&gt;
==== Xcode ====&lt;br /&gt;
&lt;br /&gt;
This is (with GNU cp, soon optional) the only mandatory part to be installed to build Aqua version of OpenOffice.org.&lt;br /&gt;
&lt;br /&gt;
Current verified working version is XCode 2.4.&lt;br /&gt;
&lt;br /&gt;
Xcode 2.2, 2.3 are known to work for Aqua development. If any earlier versions work as well, please add them here.&lt;br /&gt;
&lt;br /&gt;
==== X11SDK  (soon optional) ==== &lt;br /&gt;
&lt;br /&gt;
A dependency for Mozilla plugin needs some prototype defined in some Xllib.h header. &lt;br /&gt;
&lt;br /&gt;
Please note, this dependency is not needed in runtime, but only at buildtime. &lt;br /&gt;
&lt;br /&gt;
X11SDK.pkg archive is located in your Tiger&amp;#039;s DVD, and has to be installed in the case of you&amp;#039;re using Mozilla prebuild archives&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Workaround&amp;#039;&amp;#039;&amp;#039; :  XCode does contain Xlib headers.  Just modify INCLUDE path properly will solve the build issue.&lt;br /&gt;
&lt;br /&gt;
Meant replace ( not existing) &lt;br /&gt;
/usr/X11R6/include&lt;br /&gt;
&lt;br /&gt;
with (existing) : /Developer/SDKs/MacOSX10.4u.sdk/usr/X11R6/include &lt;br /&gt;
&lt;br /&gt;
Doing a symlink between them :&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
If X11 and /or X11SDK is(are) not installed :&lt;br /&gt;
sudo mkdir -p  /usr/X11R6&lt;br /&gt;
&lt;br /&gt;
sudo ln -s /Developer/SDKs/MacOSX10.4u.sdk/usr/X11R6/include  /usr/X11R6/include&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;This issue should be fixed soon.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Strongly recommended ===&lt;br /&gt;
&lt;br /&gt;
==== ccache ====&lt;br /&gt;
If you intend to build several times OpenOffice, you probably can benefit of ccache. ccache will speed up your future builds. The first time you make a build with ccache you won&amp;#039;t notice it, but then the build will go up to five times faster.&lt;br /&gt;
&lt;br /&gt;
You can install it using fink. It is simply named &amp;quot;ccache&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
If you don&amp;#039;t use fink, you can download it and build it yourself using the source provided at http://ccache.samba.org/&lt;br /&gt;
&lt;br /&gt;
Then, in order to use it, you need to change the following environment variables (using bash) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export CC=&amp;quot;ccache gcc&amp;quot;&lt;br /&gt;
export CXX=&amp;quot;ccache g++&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Optional ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Java ====&lt;br /&gt;
&lt;br /&gt;
Normally installed with XCode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== The perl module Archive::Zip ( optional ) ====&lt;br /&gt;
&lt;br /&gt;
Nothing is needed anymore with recent versions of XCode (means : not needed with XCode 2.4 at least).&lt;br /&gt;
&lt;br /&gt;
If you still have issues doing configure because of that, please install Archive::Zip repecting the instructions below :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[bash,N]&lt;br /&gt;
perl -MCPAN -eshell&lt;br /&gt;
install Archive::Zip&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== gpc ( optional) ====&lt;br /&gt;
GPC is available here: ftp://ftp.cs.man.ac.uk/pub/toby/gpc/gpc231.tar.Z&amp;gt;&lt;br /&gt;
Attention: Direct Link to the download but it&amp;#039;s only a few hundred KB.&lt;br /&gt;
Note: You can alternatively use the libart_lgpl library instead of GPC. This requires an additional configure flag (--enable-libart) and a precompiled libart library installed in a standard location, such as /usr/lib.&lt;br /&gt;
&lt;br /&gt;
==== pkg-config (optional) ====&lt;br /&gt;
&lt;br /&gt;
Nothing to install on Aqua build, since --disable-gtk is forced&lt;br /&gt;
&lt;br /&gt;
Called &amp;#039;&amp;#039;pkgconfig&amp;#039;&amp;#039; in Fink.&lt;br /&gt;
&lt;br /&gt;
pkg-config can be found here : http://pkgconfig.freedesktop.org/wiki/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Some Background (what is aquavcl01, EIS)&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
=== EIS ===&lt;br /&gt;
OpenOffice sources are basically kept in the CVS server located at anoncvs.services.openoffice.org. However this repository is managed by a database on top called EIS (Environment Information System) which is used to keep track of Master- and Client Workspaces. Master Workspaces are used to keep track of changes going back of the mainline trunk and undergo extensive QA-cycles. These Master Workspaces are driven to official releases. Child workspaces in contrast are copies of certain Master Workspaces used to develop and test bugfixes and additional functionality. These Child Workspaces are later (hopefully) merged back to mainlain Master Workspaces. The TX20 Report mentioned in the Links section gives a very good overview about the overall process. To learn more about Childworkspaces (CWS) have a look here: [[CWS]]. &lt;br /&gt;
&lt;br /&gt;
Go to EIS http://eis.services.openoffice.org/EIS2/servlet/Logon and Logon as guest/guest to get yourself an impression. You can find information about the different workspaces, their dates and times there. &lt;br /&gt;
&lt;br /&gt;
=== VCL (Visual Class Libraries) ===&lt;br /&gt;
&lt;br /&gt;
Porting OpenOffice.org to a new Windowing Toolkit is mostly porting of the OpenOffice&amp;#039;s VCL Layer (Visual Class Libraries) to the new platforms toolkit. The VCL-Layer is responsible of mapping the OpenOffice Application calls to the windowing toolkit.&lt;br /&gt;
&lt;br /&gt;
The (native) OpenOffice port to MacOSX using the Aqua Windowing Toolkit is developed in a child workspace called &amp;#039;&amp;#039;&amp;#039;aquavcl01&amp;#039;&amp;#039;&amp;#039;. This child workspace consists of the modules (aka subdirs): canvas dtrans extensions freetype padmin scp2 sj2 solenv vcl.&lt;br /&gt;
&lt;br /&gt;
The basic approach to prepare a developer&amp;#039;s client system to successfully build OpenOffice/Aqua is the following:&lt;br /&gt;
&lt;br /&gt;
# checkout a given OpenOffice Milestone.&lt;br /&gt;
# checkout aquavcl01 Child Workspace.&lt;br /&gt;
# merge them together.&lt;br /&gt;
# apply the latest patches.&lt;br /&gt;
&lt;br /&gt;
The last point here is a cumbersome but nevertheless necessary operation, since this porting project is in flux. Thanks to Pavel and many others improvements are happening at tremendous pace at the moment. All of these improvements get distributed as patches/diffs against aquavcl01. Aquavcl01 needs to remain stable all the time, therefore the team needs to work on this patch-by-patch aproach at the moment.&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Getting the code (checkout, merge and patch the puppy)&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
Now let&amp;#039;s have a look what to check-out and where. All these milestone numbers below highly depend on the given point-in-time. The current milestone as of now (February 2nd 2007) is m202. You may change this to your needs. You can find the current milestone of each cws in the EIS database.&lt;br /&gt;
&lt;br /&gt;
You also need to bear in mind that you have to access to the CVS-Server&amp;#039;s default port (2401). If a firewall stop&amp;#039;s you here you have to setup a CVS-Tunnel.&lt;br /&gt;
&lt;br /&gt;
==== create a directory for a given milestone, setup CVS access: ==== &lt;br /&gt;
&amp;lt;code&amp;gt;[bash,N]&lt;br /&gt;
 mkdir src680-m202&lt;br /&gt;
 cd src680-m202&lt;br /&gt;
 &lt;br /&gt;
 export CVSROOT=:pserver:anoncvs@anoncvs.services.openoffice.org:/cvs&lt;br /&gt;
 cvs login&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Please Enter the password &amp;#039;anoncvs&amp;#039;&lt;br /&gt;
&lt;br /&gt;
==== checkout Milestone m202 (1,5 GB): ==== &lt;br /&gt;
&amp;lt;code&amp;gt;[bash,N]&lt;br /&gt;
 cvs -z3 co -r SRC680_m202 OpenOffice2&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
Once done, you&amp;#039;ll obtain milestone 202. this not exactly what we want, because all changes concerning aquavcl01 Child workspace are not included. To complete, we need to check aquavcl01 changes.&lt;br /&gt;
&lt;br /&gt;
==== checkout Aquavcl01 (50 MB): ==== &lt;br /&gt;
&lt;br /&gt;
1) First possibility : create a dedicated tree (cool backup )&lt;br /&gt;
&lt;br /&gt;
To check aquavcl01 Child workspace, the most simple is to create aquavcl01 directory, and go inside this dir&lt;br /&gt;
&amp;lt;code&amp;gt;[bash,N]&lt;br /&gt;
 mkdir aquavcl01-src &lt;br /&gt;
 &lt;br /&gt;
 cd aquavcl01-src&lt;br /&gt;
 &amp;lt;/code&amp;gt;&lt;br /&gt;
 (assuming you already did cvs login ..etc )&lt;br /&gt;
&amp;lt;code&amp;gt;[bash,N]&lt;br /&gt;
 cvs -z3 co -r cws_src680_aquavcl01 OpenOffice2&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
 The following modules will be present at the end :&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: lightyellow; border: 1px red dashed; padding: 3px 0 3px 15px;&amp;quot;&amp;gt;&lt;br /&gt;
canvas&lt;br /&gt;
&lt;br /&gt;
extensions&lt;br /&gt;
&lt;br /&gt;
fpicker&lt;br /&gt;
&lt;br /&gt;
padmin&lt;br /&gt;
&lt;br /&gt;
sal&lt;br /&gt;
&lt;br /&gt;
scp2&lt;br /&gt;
&lt;br /&gt;
sfx2&lt;br /&gt;
&lt;br /&gt;
solenv&lt;br /&gt;
&lt;br /&gt;
dtrans&lt;br /&gt;
&lt;br /&gt;
freetype&lt;br /&gt;
&lt;br /&gt;
psprint&lt;br /&gt;
&lt;br /&gt;
sj2&lt;br /&gt;
&lt;br /&gt;
vcl&lt;br /&gt;
&lt;br /&gt;
toolkit&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
All these modules are the ones we modified to create the native version :  they all are tagged &amp;quot;aquavcl01&amp;quot; (see all CVS/Tag files in the tree) and all you have to do is either rename or delete the one located in src680-m202 and replace them with the one located in aquavcl01-src.&lt;br /&gt;
&lt;br /&gt;
e.g.  : canvas in src680-m202 will become canvas_m202 , and then, cp canvas from aquavcl01-src into src-m202&lt;br /&gt;
&lt;br /&gt;
This applies for all the modules listed above.&lt;br /&gt;
&lt;br /&gt;
2) Second possibility : use a little script to extract changes : extract_aquavcl01.sh&lt;br /&gt;
&lt;br /&gt;
This shell script, located in src680-m202 will contain :&lt;br /&gt;
&amp;lt;code&amp;gt;[bash,N]&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
list=&amp;quot;canvas extensions fpicker padmin scp2 sfx2 solenv dtrans freetype psprint sj2 vcl sal toolkit&amp;quot;&lt;br /&gt;
for i in $list ;  do &lt;br /&gt;
   mv $i $i-m202&lt;br /&gt;
   cvs -z3 co -r cws_src680_aquavcl01 $i&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then chmod +x extract_aquavcl01.sh&lt;br /&gt;
&lt;br /&gt;
and run it :&lt;br /&gt;
&lt;br /&gt;
./extract_aquavcl01.sh&lt;br /&gt;
&lt;br /&gt;
When finished, and if no problem occurs, you should have a complete tree.&lt;br /&gt;
&lt;br /&gt;
=== One-Time preparations and scripts ===&lt;br /&gt;
&lt;br /&gt;
OpenOffice building gets configured by the popular open-source configuration-management package &amp;#039;autoconf&amp;#039;. So you can do your beloved &amp;#039;./configure&amp;#039; command, but in our case this is done in the &amp;#039;config_office&amp;#039; subdirectory. To save the configure parameters and use them with different milestones I used to link-in my shellscript to fire up the ./configure line.&lt;br /&gt;
&lt;br /&gt;
My directory-structure looks like this:&lt;br /&gt;
&lt;br /&gt;
 bin/&lt;br /&gt;
 src680-m182/&lt;br /&gt;
 src680-m196/&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
Now I go to the &amp;#039;config_office&amp;#039; subdir and link in my startscript:&lt;br /&gt;
&amp;lt;code&amp;gt;[bash,N]&lt;br /&gt;
 cd src680-m202/config_office/&lt;br /&gt;
 ln -s ../../bin/build.sh&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
And this is how &amp;#039;build.sh&amp;#039; looks like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[bash,N]&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 export BASE=`pwd|sed &amp;#039;s/\/config_office//&amp;#039;`&lt;br /&gt;
 export OOVERSION=`echo $BASE|sed &amp;#039;s/^\/.*\///&amp;#039;`&lt;br /&gt;
 echo Building from      : $BASE&lt;br /&gt;
 echo OpenOffice Version : $OOVERSION&lt;br /&gt;
 ./configure \&lt;br /&gt;
 --with-lang=&amp;quot;de en-US&amp;quot; \&lt;br /&gt;
 --with-jdk-home=/Library/Java/Home/ \&lt;br /&gt;
 --with-gnu-cp=/sw/bin/cp \&lt;br /&gt;
 --with-epm=internal \&lt;br /&gt;
 --disable-mozab \&lt;br /&gt;
 --disable-odk \&lt;br /&gt;
 --disable-pasf \&lt;br /&gt;
 --disable-gtk \&lt;br /&gt;
 --disable-mozilla \&lt;br /&gt;
 --with-build-version=$OOVERSION-`date +%d-%m-%y` \&lt;br /&gt;
 --disable-fontconfig \&lt;br /&gt;
 --disable-neon \&lt;br /&gt;
 --without-nas&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--disable-odk will avoid you to download some windows dll which is not needed for aqua-build.&lt;br /&gt;
&lt;br /&gt;
--disable-pasf : pasf stands for Portable Audio System file. As we want to use system library rather than portable ones, we disabled this. However, at this time not all functionality will be available with pasf disabled. You might willing to use --with-pasf if you want working audio in your build.&lt;br /&gt;
&lt;br /&gt;
--disable-nas : nas stands for Network Audio System, it uses X11, if you want to use it in your build, just remove this flag. You will need to install the X11 package provided in your CDs/DVD Mac OS X installation. X11 SDK from xCode tools is not required for build this.&lt;br /&gt;
&lt;br /&gt;
This is allowedly a pretty much limited setup, but my overall goal is to get people to have &amp;#039;svdem&amp;#039; build to start coding rather than to have a production ready build for the final release. Therefore I switched off most of the stuff. How these offical builds are done in the long run is to be decided when we get there.&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;List of Patches for a given Milestone&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
Here is a list of Patches one has to apply against a given Milestone of SRC680 (including CWS aquavcl01). Please keep the older Milestones here, since people are probably still on these Versions.&lt;br /&gt;
&lt;br /&gt;
                             &amp;lt;!--  &amp;#039;&amp;#039;&amp;#039;&amp;lt;big&amp;gt;IMPORTANT :  m202 resync is CURRENTLY in progress : please wait &amp;lt;/big&amp;gt;&amp;#039;&amp;#039;&amp;#039;--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 PLEASE NOTE : &amp;#039;&amp;#039;&amp;#039;Current milestone for Aqua build is m202&amp;#039;&amp;#039;&amp;#039;  (older milestones are deprecated)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Milestone || Patch to apply || Status&lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039; m202&amp;#039;&amp;#039;&amp;#039;  || To avoid crashes with several entries in menu  apply [http://eric.bachard.free.fr/patches/aqua/about_workaround/diff_salframe.diff about_workaround patch] in vcl/aqua/source/window  ||Work in progress &lt;br /&gt;
|-&lt;br /&gt;
| &amp;#039;&amp;#039;&amp;#039; (deprecated) m200&amp;#039;&amp;#039;&amp;#039;  || To avoid crashes with several entries in menu  apply [http://eric.bachard.free.fr/patches/aqua/about_workaround/diff_salframe.diff about_workaround patch] in vcl/aqua/source/window  ||Work in progress &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;List of Patches requiring testing before for integration&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
All patches that developers have that need testing or peer review should be added here.&lt;br /&gt;
&lt;br /&gt;
salatslayout.cxx : new implementation of text layout has to be tested.&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Known build issues&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;(deprecated) m200&amp;#039;&amp;#039;&amp;#039;: Breakage in instsetoo_native &lt;br /&gt;
&lt;br /&gt;
See [http://eric.bachard.free.fr/mac/aquavcl/patches/m200_aquavcl01/instsetoo_native_util_makefile.mk.diff  Fix for instsetoo_native breakage]&lt;br /&gt;
&lt;br /&gt;
how apply the patch ?&lt;br /&gt;
&lt;br /&gt;
Place it in &amp;lt;install_dir&amp;gt;/instsetoo_native/util&lt;br /&gt;
&lt;br /&gt;
type :&lt;br /&gt;
&lt;br /&gt;
patch -p0&amp;lt;instsetoo_native_util_makefile.mk.diff&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
m196:  Breakage in pyuno &lt;br /&gt;
&lt;br /&gt;
See [http://www.openoffice.org/issues/show_bug.cgi?id=72372 pyuno not found]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Workaround&amp;#039;&amp;#039;&amp;#039; :  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1) either use the patch provided in issue 72372&lt;br /&gt;
&lt;br /&gt;
2) or simply do ( in the same terminal, or please source the environment before):&lt;br /&gt;
&lt;br /&gt;
cd bridges &lt;br /&gt;
build &amp;amp;&amp;amp; deliver&lt;br /&gt;
cd ../pyuno&lt;br /&gt;
build &amp;amp;&amp;amp; deliver&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; pyuno should build without any problem&lt;br /&gt;
&lt;br /&gt;
cd .. &amp;amp;&amp;amp; dmake &lt;br /&gt;
&lt;br /&gt;
will complete your build&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[User:Ericb|Ericb]] 14:52, 13 December 2006 (CET)&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Doing the build (about 4,5 GB)&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
Fine, now we have a (hopefully) working &amp;#039;build.sh&amp;#039; in the config_office subdir. We need to run it beforehand:&lt;br /&gt;
&lt;br /&gt;
 cd src680-m202/config_office/&lt;br /&gt;
 ./build.sh&lt;br /&gt;
&lt;br /&gt;
This will setup the necessary includefiles and create a couple of files in the &amp;#039;&amp;#039;&amp;#039;parent&amp;#039;&amp;#039;&amp;#039; directory (bootstrap, MacOSXPPCEnv.Set.sh, MacOSXPPCEnv.Set). If you are using the sh, ksh or bash you only need to take care for &amp;#039;MacOSXPPCEnv.Set.sh&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Now we need to get back to our base-directory, run the bootstrap script, source our Enviroment (MacOSXPPCEnv.Set.sh) and finally start the build-process:&lt;br /&gt;
&lt;br /&gt;
On PowerPC :&lt;br /&gt;
&lt;br /&gt;
 cd ..&lt;br /&gt;
 ./bootstrap&lt;br /&gt;
 source MacOSXPPCEnv.Set.sh&lt;br /&gt;
 time dmake&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Or (on Mac Intel ) : &lt;br /&gt;
&lt;br /&gt;
 cd ..&lt;br /&gt;
 ./bootstrap&lt;br /&gt;
 source MacOSXX86Env.Set.sh&lt;br /&gt;
 time dmake&lt;br /&gt;
&lt;br /&gt;
The main purpose of the &amp;#039;&amp;#039;&amp;#039;boostrap&amp;#039;&amp;#039;&amp;#039; script is to build (if necessary) the dmake utility used. Dmake once was a unix make-clone made by wticorp but got incorporated into OpenOffice since it was orphaned. For more information about dmake, it&amp;#039;s history and manpage have a look here: http://tools.openoffice.org/dmake/index.html&lt;br /&gt;
&lt;br /&gt;
Sourcing MacOSXPPCEnv.Set.sh is very important not only for building but also for &amp;#039;&amp;#039;&amp;#039;running&amp;#039;&amp;#039;&amp;#039; svdem later on. Here all the Environment-Variables for the Build will be set up. For a detailed description see [[Environment_Variables]]. Please note that on Intel machines, &amp;#039;MacOSXPPCEnv.Set&amp;#039; should be substituted with &amp;#039;MacOSXX86Env.Set&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
This Build process takes on my box (Dual 1.8 GHz G5, 1.5GB RAM) roughly 10 hours. Be patient. What can you do meanwhile? Do this:&lt;br /&gt;
&amp;lt;code&amp;gt;[bash,N]&lt;br /&gt;
 while true ; do find . -maxdepth 1 -type d -anewer MacOSXPPCEnv.Set.sh |wc -l ; sleep 5; done&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
and wait till the number reaches 174&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Creating Debug-Versions of Modules&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;pre&amp;gt; Important: a new section about use XCode for OpenOffice.org debug has been created.&lt;br /&gt;
 See :&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[MacOSX_Debug_OpenOffice.org_using_XCode]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Is it possible to build the complete set with symbols included ?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Currently not possible, and not advised.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; is it possible to build some modules with symbols ?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Yes, and that&amp;#039;s the simplest way to proceed. Some modules, like sal and vcl can be rebuilt using debug.&lt;br /&gt;
&lt;br /&gt;
Example :&lt;br /&gt;
&lt;br /&gt;
To rebuild sal with symbols included, do:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[bash,N]&lt;br /&gt;
cd sal&lt;br /&gt;
rm -rf unxmacxp.pro&lt;br /&gt;
build debug=true&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and recopy the libs into the bundle. gdb will display the symbols, and make your life easier.&lt;br /&gt;
&lt;br /&gt;
Note :  debug string is tested, and DEBUG is active when debug string is not empty. So debug=t works too.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; How change gdb options, and use e.g. -g -ggdb or -gdwarf-2  ?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
To rebuild the module, you just have to modify the option in solenv/inc/unxmacx.mk, replacing -g with -ggdb&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Known issues&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 Sometimes a build error, or a runtime error, may be seen in the normal build,  &lt;br /&gt;
 but the error goes away when --enable-debug is used or if the module is compiled with debug=true. &lt;br /&gt;
&lt;br /&gt;
The DEBUG build turns off optimisation, so this is a hint that compiler optimisation causes the error.&lt;br /&gt;
&lt;br /&gt;
The error might be due to incorrect code or a compiler fault.  Such errors might not be seen on all platforms, &lt;br /&gt;
&lt;br /&gt;
and might not be seen in different compiler versions on one platform.&lt;br /&gt;
&lt;br /&gt;
If the code can not be fixed there is a workaround using NOOPTFILES to build specified files with no optimisation.&lt;br /&gt;
 &lt;br /&gt;
Example : &lt;br /&gt;
&lt;br /&gt;
jvmfwk on Mac OS X: build jvmfwk in m183 on Mac OS X Intel leads to Bus Error when javaldx is run.&lt;br /&gt;
&lt;br /&gt;
Solution : use trial and error to rebuild individual files with debug=true. This proves the problem lies with vendorbase.cxx&lt;br /&gt;
&lt;br /&gt;
Have a look in sc/source/core/data/makefile.mk for an example to use NOOPTFILES&lt;br /&gt;
&lt;br /&gt;
To solve our problem: just add : NOOPTFILES= $(SLO)$/vendorbase.obj in the corresponding makefile.&lt;br /&gt;
&lt;br /&gt;
Take care in case some .IF is needed to prevent interference with other platforms.&lt;br /&gt;
&lt;br /&gt;
There&amp;#039;s some additional information around debugging on Christians Page [[User:CL#2006-09-03]]&lt;br /&gt;
&lt;br /&gt;
== Building and running svdem ==&lt;br /&gt;
&lt;br /&gt;
We want to run the demonstration programs called &amp;quot;svdem&amp;quot;. There are a couple of binaries called &amp;quot;svdem&amp;quot;, which area they cover is still somewhat unclear to me, I hope some of you guys can shed some light here. But hey, this is a wiki! Just correct here :-).&lt;br /&gt;
&lt;br /&gt;
==== svdem from VCL ====&lt;br /&gt;
To have the VCL Testprogram build you have to do:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;[FIXME] replace this scetion with the same, but about svdem from svtools&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
 cd vcl; build --all&lt;br /&gt;
&lt;br /&gt;
This should have created a file called &amp;quot;svdem&amp;quot; here: vcl/unxmacxp.pro/bin/svdem. If you managed to build these binaries, you are nearly there. What you need now, is a wrapper directory structure to make this binary a fellow Mac OSX application. I mean the ones which have this structure:&lt;br /&gt;
&lt;br /&gt;
 svdem.app/&lt;br /&gt;
 svdem.app/Contents&lt;br /&gt;
 svdem.app/Contents/Info.plist&lt;br /&gt;
 svdem.app/Contents/MacOS&lt;br /&gt;
 svdem.app/Contents/MacOS/applicat.rdb&lt;br /&gt;
 svdem.app/Contents/MacOS/svdem&lt;br /&gt;
&lt;br /&gt;
You can basically create this structure anywhere you want. And you can link-in the file you just created (svdem). So you build up this structure once and link-in the freshly created svdem there:&lt;br /&gt;
&lt;br /&gt;
 ls -l svdem applicat.rdb&lt;br /&gt;
 svdem -&amp;gt; /opt/src/openoffice/src680-m202/vcl/unxmacxp.pro/bin/svdem&lt;br /&gt;
 applicat.rdb -&amp;gt; /opt/src/openoffice/src680-m202/vcl/unxmacxp.pro/bin/applicat.rdb&lt;br /&gt;
&lt;br /&gt;
Now only the Info.plist file is missing, so here we go:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[xml,N]&lt;br /&gt;
 &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
 &amp;lt;!DOCTYPE plist PUBLIC &amp;quot;-//Apple Computer//DTD PLIST 1.0//EN&amp;quot; &amp;quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;plist version=&amp;quot;1.0&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;dict&amp;gt;&lt;br /&gt;
         &amp;lt;key&amp;gt;CFBundleDevelopmentRegion&amp;lt;/key&amp;gt;&lt;br /&gt;
         &amp;lt;string&amp;gt;English&amp;lt;/string&amp;gt;&lt;br /&gt;
         &amp;lt;key&amp;gt;CFBundleDisplayName&amp;lt;/key&amp;gt;&lt;br /&gt;
         &amp;lt;string&amp;gt;SvDem&amp;lt;/string&amp;gt;&lt;br /&gt;
         &amp;lt;key&amp;gt;CFBundleExecutable&amp;lt;/key&amp;gt;&lt;br /&gt;
         &amp;lt;string&amp;gt;svdem&amp;lt;/string&amp;gt;&lt;br /&gt;
         &amp;lt;key&amp;gt;CFBundleIdentifier&amp;lt;/key&amp;gt;&lt;br /&gt;
         &amp;lt;string&amp;gt;com.yourcompany.svdem&amp;lt;/string&amp;gt;&lt;br /&gt;
         &amp;lt;key&amp;gt;CFBundleInfoDictionaryVersion&amp;lt;/key&amp;gt;&lt;br /&gt;
         &amp;lt;string&amp;gt;6.0&amp;lt;/string&amp;gt;&lt;br /&gt;
         &amp;lt;key&amp;gt;CFBundlePackageType&amp;lt;/key&amp;gt;&lt;br /&gt;
         &amp;lt;string&amp;gt;APPL&amp;lt;/string&amp;gt;&lt;br /&gt;
         &amp;lt;key&amp;gt;CFBundleSignature&amp;lt;/key&amp;gt;&lt;br /&gt;
         &amp;lt;string&amp;gt;????&amp;lt;/string&amp;gt;&lt;br /&gt;
         &amp;lt;key&amp;gt;CFBundleVersion&amp;lt;/key&amp;gt;&lt;br /&gt;
         &amp;lt;string&amp;gt;1.0&amp;lt;/string&amp;gt;&lt;br /&gt;
         &amp;lt;key&amp;gt;LSRequiresCarbon&amp;lt;/key&amp;gt;&lt;br /&gt;
         &amp;lt;true/&amp;gt;&lt;br /&gt;
 &amp;lt;/dict&amp;gt;&lt;br /&gt;
 &amp;lt;/plist&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you created the directory structure properly you can do &amp;#039;./svdem&amp;#039; in the &amp;#039;svdem.app/Contents/MacOS/&amp;#039; directory. You should see the svdem coming up.&lt;br /&gt;
&lt;br /&gt;
==== svdem from svtools ====&lt;br /&gt;
* Copy the application package you created for the vcl svdem.&lt;br /&gt;
* Source your MacOSX[PPC-X86]Env.Set.sh&lt;br /&gt;
* Go into svtools/workben&lt;br /&gt;
* build svdem using dmake in the workben directory&lt;br /&gt;
* link the svdem and applicat.rdb from Contents/MacOS to the ones located in svtools/unxmacxp.pro/bin&lt;br /&gt;
&lt;br /&gt;
You are done : you can now source your environment and run svdem using your usual shell.&lt;br /&gt;
&lt;br /&gt;
== &amp;#039;&amp;#039;&amp;#039;Installing, preparing and running OpenOffice.org&amp;#039;&amp;#039;&amp;#039; ==&lt;br /&gt;
&lt;br /&gt;
Here I like to outline the steps to run OpenOffice.org after a successful build from the sources. Running the native Aqua Version of OpenOffice.org is somewhat tricky at the moment, since the installation procedure and mode are not in their final state. So right now one has to manually do some preparations to run the Office suite. This will change in the future when we are about to release some Alpha Builds to a wider audience.&lt;br /&gt;
&lt;br /&gt;
=== Drag &amp;amp; Drop Install the Application from the Diskimage ===&lt;br /&gt;
&lt;br /&gt;
When you are one of the lucky few (Don&amp;#039;t give up, Eric!), who have a successful build, you are going to see something like this as the last lines of the build:&lt;br /&gt;
&lt;br /&gt;
 .&lt;br /&gt;
 .&lt;br /&gt;
 .&lt;br /&gt;
 ......................................................................................................................................................&lt;br /&gt;
    (CRC32 $11685D33: DiscRecording 3.1.3f2 (Apple_HFS : 2))&lt;br /&gt;
 Ressourcen hinzufügen…&lt;br /&gt;
 ......................................................................................................................................................&lt;br /&gt;
 Dauer: 15.406s&lt;br /&gt;
 Dateigröße: 144732418 Bytes, Prüfsumme: CRC32 $14E0BB67&lt;br /&gt;
 Bearbeitete Sektoren: 773848, 773845 komprimiert&lt;br /&gt;
 Geschwindigkeit: 24.5M Bytes/Sek&lt;br /&gt;
 Ersparnis: 63.5 %&lt;br /&gt;
 created: /opt/src/openoffice/src680-m202/instsetoo_native/unxmacxp.pro/OpenOffice/install/de/OpenOffice.org-2.2_de.dmg&lt;br /&gt;
&lt;br /&gt;
In this final step the &amp;quot;&amp;quot;instsetoo_native&amp;quot;&amp;quot; target creates the install Diskimages using Apple&amp;#039;s &amp;#039;hdiutil&amp;#039;. In my case it gives its output in German. After this disk image(s) have been created, double click the disk image to mount it (or type open &amp;lt;path to the DMG Image&amp;gt;) , and then move the icon named &amp;quot;OpenOffice.org 2.2&amp;quot; to your &amp;#039;&amp;#039;Applications&amp;#039;&amp;#039; folder (or any other folder you want this program to reside). The &amp;quot;OpenOffice.org 2.1&amp;quot; icon shown in the Finder is in fact a subdirectory called &amp;quot;OpenOffice.org 2.2.app&amp;quot;. Subdirectories named &amp;quot;.app&amp;quot; (along with some well-know files inside like Info.plist, etc) are called &amp;#039;&amp;#039;Bundles&amp;#039;&amp;#039; in Apple&amp;#039;s lingo.&lt;br /&gt;
&lt;br /&gt;
=== Prepare the installation ===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Soon optional (tests in progress) &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
After the OpenOffice 2.2 Application has been copied to its destination, you have to go into this bundle and run a small shell script provided by Pavel Janik to prepare soffice.bin (OpenOffice.org launcher) for running. You have to run this script in the directory where a Universal Binary called &amp;quot;droplet&amp;quot; is located. This &amp;quot;droplet&amp;quot; binary was used to fire-off the X11 version of OpenOffice.org. Expect this to change, but as of now we have to do it like this.&lt;br /&gt;
&lt;br /&gt;
I have put my OpenOffice.org build in my home directory&amp;#039;s private &amp;quot;Application&amp;quot; folder (/Users/schmidtm/Applications), so please change this path to your installation. Now go to into the bundle and run the script:&lt;br /&gt;
&lt;br /&gt;
 cd /Users/schmidtm/Applications/OpenOffice.org 2.2.app/Contents/MacOS&lt;br /&gt;
 /opt/src/openoffice/bin/fix_installed_OOo&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;[bash,N]&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 [ ! -f droplet ] &amp;amp;&amp;amp; {&lt;br /&gt;
     echo &amp;quot;Please run me in the directory, where binary named droplet is located.&amp;quot;&lt;br /&gt;
     exit 0&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 mv THIRDPARTYLICENSEREADME.html help presets share ..&lt;br /&gt;
 mv droplet droplet.orig&lt;br /&gt;
 mv program/* .&lt;br /&gt;
 rmdir program&lt;br /&gt;
 &lt;br /&gt;
 cd ..&lt;br /&gt;
 ln -sf MacOS program&lt;br /&gt;
 sed &amp;#039;s#droplet#soffice.bin#&amp;#039; Info.plist &amp;gt;Info.plist.new&lt;br /&gt;
 mv Info.plist.new Info.plist&lt;br /&gt;
 cd MacOS&lt;br /&gt;
 &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Run the soffice.bin ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We&amp;#039;re nearly through, let&amp;#039;s fire-off the binary:&lt;br /&gt;
&lt;br /&gt;
 AQUA_NATIVE_MENUS=TRUE ./soffice.bin -nofirststartwizard -norestore&lt;br /&gt;
&lt;br /&gt;
Notice the enviroment variable here. AQUA_NATIVE_MENUS is experimental stuff created by Pavel, SAL_NO_NWF was created some times ago, and is located in vcl/source/window/window.cxx . At the moment we have:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Variable || Function&lt;br /&gt;
|-&lt;br /&gt;
| SAL_NO_NWF=TRUE  || disable native controls code&lt;br /&gt;
|-&lt;br /&gt;
| AQUA_NATIVE_MENUS=TRUE || enable experimental native menus code&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Both changes are marked with comments in the source code, and when we remove them in the future, native controls and native menus will be enabled by default.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;HACK&amp;#039;&amp;#039;&amp;#039; : with current code, to enable native menus by defaut without have to define an environment variable, just comment as follow :&lt;br /&gt;
&lt;br /&gt;
in vcl/aqua/source/window/salmenu.cxx, around line 124 :&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 /*&lt;br /&gt;
     static const char *pExperimental = getenv (&amp;quot;AQUA_NATIVE_MENUS&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
     if ( !pExperimental || strcasecmp(pExperimental, &amp;quot;TRUE&amp;quot;) )&lt;br /&gt;
         return FALSE;&lt;br /&gt;
 */&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
&lt;br /&gt;
# Bug Database: http://www.openoffice.org/issues/query.cgi&lt;br /&gt;
# Mailinglist: mac@porting.openoffice.org&lt;br /&gt;
# IRC Meeting-Logs (#ooo_macport@freenode.org): [[Previous_Mac_Meeting_logs]] [[MacOSXPortMeetings]]&lt;br /&gt;
# TX20: http://eric.bachard.free.fr/UTBM_TX20/reports/Carbon_vcl.pdf&lt;br /&gt;
# OpenOffice Source Directory Structure: http://wiki.services.openoffice.org/wiki/Source_code_directories&lt;br /&gt;
# Pavels Patch Wiki: http://blog.janik.cz/&lt;br /&gt;
# Eric Bachard Wiki: http://wiki.services.openoffice.org/wiki/User:Ericb&lt;br /&gt;
# Christian Lippka Wiki: http://wiki.services.openoffice.org/wiki/User:CL&lt;br /&gt;
# Carbon: http://developer.apple.com/carbon&lt;br /&gt;
# EIS: http://eis.services.openoffice.org/EIS2/servlet/Logon&lt;br /&gt;
# Runtime Configuration: http://developer.apple.com/documentation/MacOSX/Conceptual/BPRuntimeConfig/index.html&lt;br /&gt;
# OpenOffice Domain Developer http://wiki.services.openoffice.org/wiki/DomainDeveloper&lt;br /&gt;
&lt;br /&gt;
== Screenshots ==&lt;br /&gt;
&lt;br /&gt;
# Eric Bachard screenshots (some are from Stephan Schaefer) http://eric.bachard.free.fr/mac/aquavcl/screenshots/&lt;br /&gt;
# Most recent: http://eric.bachard.free.fr/mac/aquavcl/screenshots/aqua_menus_05_nov_06/&lt;br /&gt;
# Pavel Janik screenshots http://blog.janik.cz/images/MacOSX/2006-08-10&lt;br /&gt;
# Important screenshot (eventloop issue) : http://blog.janik.cz/images/MacOSX/  =&amp;gt; See : OOoMenus-separator-and-disabled_entries.png&lt;br /&gt;
# Native Menus : http://eric.bachard.free.fr/mac/aquavcl/screenshots/aqua_native_controls_03_11_06/aqua_menus_01.jpg&lt;br /&gt;
&lt;br /&gt;
More menus : http://eric.bachard.free.fr/mac/aquavcl/screenshots/aqua_menus_05_nov_06/index.html&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:MacOSX]]&lt;br /&gt;
[[Category:Porting]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Aqua]]&lt;/div&gt;</summary>
		<author><name>Plipli</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Aquavcl01_tasks&amp;diff=23873</id>
		<title>Aquavcl01 tasks</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Aquavcl01_tasks&amp;diff=23873"/>
		<updated>2007-01-26T13:44:54Z</updated>

		<summary type="html">&lt;p&gt;Plipli: /* &amp;#039;&amp;#039;&amp;#039;Remove deprecated functions&amp;#039;&amp;#039;&amp;#039; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is work in progress. &lt;br /&gt;
&lt;br /&gt;
== Aqua VCL tasks == &lt;br /&gt;
&lt;br /&gt;
This page is reserved for all aquavcl01 tasks, and will probably removed (I hope) when aquavcl01 will be integrated) &lt;br /&gt;
&lt;br /&gt;
Any contributions/help to continue/build this page is welcome.&lt;br /&gt;
&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039;Remove deprecated functions&amp;#039;&amp;#039;&amp;#039; === &lt;br /&gt;
&lt;br /&gt;
Related reading: [http://developer.apple.com/documentation/Carbon/Reference/QuickDraw_Ref/Reference/reference.html#//apple_ref/doc/c_ref/GDevice QuickDraw Reference], [http://developer.apple.com/documentation/Carbon/Reference/QuickDraw_Ref/DeprecationAppendix/AppendixADeprecatedAPI.html Deprecated QuickDraw functions] and [http://developer.apple.com/documentation/Carbon/Conceptual/QuickDrawToQuartz2D/index.html?http://developer.apple.com/documentation/Carbon/Conceptual/QuickDrawToQuartz2D/tq_intro/chapter_1_section_1.html QuickDraw to Quartz2D guide]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
short list of the deprecated functions + the context :&lt;br /&gt;
&lt;br /&gt;
Context 1 : App/ Timer   # comment : since RunApplicationEventLoop is usable, we should be able to replace *TimeMask with the recent corresponding kEvent*&lt;br /&gt;
&lt;br /&gt;
file: &lt;br /&gt;
deprecated function : RemoveTimeTask  /  PrimeTimeTask / InstallTimeTask  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Context 2: gdi / ATS+fonts :   # Comment -&amp;gt; work in progress. I&amp;#039;ll describe everything&lt;br /&gt;
file : vcl/aqua/source/gdi/salatslayout.cxx&lt;br /&gt;
&lt;br /&gt;
--&amp;gt; i will remove deprecated in salatslayout while i m working on it. (plipli)&lt;br /&gt;
  &lt;br /&gt;
deprecated function : ATSUGetGlyphInfo &lt;br /&gt;
&lt;br /&gt;
file : vcl/aqua/source/gdi/salatsuifontutils.cxx     # same as ATS+fonts&lt;br /&gt;
deprecated functions : TextOrder / ScriptOrder /  LanguageOrder / FMGetFontFromFontFamilyInstance &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
No idea  (ChristianL  ? ) :&lt;br /&gt;
&lt;br /&gt;
Context 3 : gdi / Color + Pixmaps    &lt;br /&gt;
file : vcl/aqua/source/gdi/salcolorutils.cxx  &lt;br /&gt;
deprecated functions : GetGDevice / MakeITable / GetCTSeed / GetPixDepth /GetCTable / &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Context3 4: gdi / Geometry + Pixmaps&lt;br /&gt;
&lt;br /&gt;
file : vcl/aqua/source/gdi/salpixmaputils.cxx&lt;br /&gt;
deprecated functions : SetRect / GetGDevice (dupe) / NewPixMap / GetPixelsState / SetPixelsState / LockPixels / DisposePixMap&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Context 4: Frame &lt;br /&gt;
&lt;br /&gt;
file : vcl/aqua/source/window/salframe.cxx&lt;br /&gt;
deprecated functions : GetMainDevice / SetRect (dupe) / NewRgn / GetRegionBounds / DisposeRgn&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
URL : [http://eric.bachard.free.fr/mac/aquavcl/logs_aquavcl/log.log build log of vcl/aqua]&lt;br /&gt;
&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039; CWS Integration&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enter your plan/ proposal here&lt;br /&gt;
&lt;br /&gt;
=== &amp;#039;&amp;#039;&amp;#039; CWS REsync&amp;#039;&amp;#039;&amp;#039; ===&lt;br /&gt;
&lt;br /&gt;
Current:  m187 &lt;br /&gt;
&lt;br /&gt;
Scheduled:  ?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[FIXME] : complete with other tasks &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[User:Ericb|Ericb]] 21:09, 2 November 2006 (CET)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Porting]]&lt;br /&gt;
[[Category:MacOSX]]&lt;br /&gt;
[[Category:Aqua]]&lt;/div&gt;</summary>
		<author><name>Plipli</name></author>
	</entry>
</feed>