* How many cards do we have? autodetection?
* Is our card a dualhead card?
* How many monitors are connected?

* difference between one and two card is different device sections
* twinview has one device, one screen, one serverlayout
* xinerama has two devices, two screens, two monitors

twinview <> xinerama:	
	all sections double
	
one or two cards:
	different device sections
	
one or two monitors
	?? one or two cards
	?? twinview or xinerama (driver? different resolutions?)
	
	
class XSetup(Object):
	Screens[] getScreens()
	bool maySetDualhead()
	getUseDualhead()
	setUseDualhead(bool)
	(xoff,yoff) getDualheadPosition() # offset from screen 1 top left corner.
	setDualheadOrientation(xoff,yoff)
	
	bool is3DAccelerated()
	
	GFXCard[] getGFXCards()
	
	
class Screen(Object):
	maySetResolution()
	Resolution[] getAvailableResolutions()
	getResolution()
	setResolution(Resolution)
	
	maySetRefresh()
	int getRefreshRate()
	setRefreshRate(int)
	
	maySetRotation()
	getRotation()
	getAvailableRotations()
	setRotation()
	
	bool isAvailableMirrorHorizontal() 
	getMirrorHorizontal()
	setMirrorHorizontal()
	bool isAvailableMirrorVertical() 
	getMirrorVertical()
	setMirrorVertical()
			
class Resolution(Object):
	int getWidth()
	int getHeight()
	int[] getRefreshRates():
		
		
		
* What is the current setup? (Xinerama? Singlehead? Twinview?)

- Warning: Xinerama vs. DRI
    * "unlinking" the sliders will yield a warning "Using different 
    resolutions on the screens will disable 3D hardware acceleration on 
    the second head", which is a Xinerama deficiency).

    Note: Probably only Ati and nvidia do support mergedFB properly, other 
    drivers might lose xinerama features like placement and maximize

- Drag and drop widget
  * The fun part: implementing a Drag and Drop widget where the (resizing) 
  screens can be dragged into their respective relative position, 
  "snapping" in the more obvious ones, i.e. plain "left of" and "right 
  of", "above" and "under" (without offset). 


- displayconfig.MonitorPreview:
	Singleheadpreview: Monitor keeps size
	DualheadPreview: like now, monitor resizes to show relative screen size

Displayconfig; Notes abstractielaag
-------------------------------------
* een XSetup heeft N gfxcards.
* een GfxCard heeft N Monitors
* XSetup is een container voor alle objecten uit de abstractielaag.
* XSetup.addMonitor(monitor,gfxcard) waarbij gfxcard al in XSetup zit en een 
  referentie naar de kaart vormt waarop monitor is aangesloten.
* Een Adaptor heeft een 1:1 relatie met een monitor, en is 'onderdeel' van 
  een "Screen" (in de zin van  Screen section uit xorg.conf)
* Controls zoals resize en de rotatie / mirroring widgets manipuleren een 
  Adaptor, die intern de Screen manipuleert 
* Singlehead resolutie verandert via xrandr en slaat settings op via 
  displayconfig-restore.py
* Dualhead resolutie aanpassen pakt intern een passende metamode (bij twinview) 
  en checkt of alle zinvolle metamodes beschikbaar zijn, anders wordt de user 
  gewaarschuwd dat dit eerst moet gebeuren.
* Adaptor in dualhead / twinview modus worden dus naar een screen vertaald 
  metamodes heeft.
* Screen moet dan nog support voor metamodes krijgen.
    
    
    
displayconfig:
===============
* Current resolution doesn't get recognized if current != highest resolution
* new tab display powermanagement, just like the existing tab, we need to be
  able to at least replace existing functionality


New Widgets:
-------------
* DualheadPreview
* RadioButtons instead of dropdown for Positioning

* Detect if we're already running on dualhead, (en|dis)able widgets accordingly
* Nvidia MergedFB
    - Make preview of dualhead more clear (only xinerama or also mergedFB?)
    - Generate list of Metamodes from resolutions available
    - write dualhead settings to xorg.conf
* Compare dualhead with different drivers WRT xorg.conf
    - generic Xinerama (Matrox, others?)
    - dualhead for fglrx, SiS ...
    - MergedFB as special case for nvidia (sis?)
* Preview should be rotatable (and|or) resizable (and|or) DualHeadpreview?
* Add missing elements to DualHeadTab
    - [ ] Use MergedFB (binds two resolution sliders)
    - label with warning "You can only use DRI on one head with different resolutions blahblah"
FIXME: enabling Dualhead should:
    - Update resolutions with "metamodes"
    - disable Rotation/mirroring stuff
    - Add ServerLayout to xorg.conf
    - Add second Screen to xorg.conf
    - Alternatively (if both resolutions are the same enable MergedFB
