/*  -*-Prolog-*-

    Part of XPCE --- The SWI-Prolog GUI toolkit

    Author:        Jan Wielemaker and Anjo Anjewierden
    E-mail:        J.Wielemaker@cs.vu.nl
    WWW:           http://www.swi-prolog.nl/projects/xpce/
    Copyright (C): 1985-2012, University of Amsterdam
			      VU University Amsterdam

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public
    License as published by the Free Software Foundation; either
    version 2.1 of the License, or (at your option) any later version.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public
    License along with this library; if not, write to the Free Software
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
*/

:- module(link_xpce, []).
:- set_prolog_flag(generate_debug_info, true).

/** <module> Associate XPCE with SWI-Prolog

This  file  initialises  XPCE,  the  SWI-Prolog   native  GUI.  XPCE  is
initialised only if it is detected.

The source-location of this file  is packages/xpce/swipl/swipl-rc. It is
installed as <plbase>/<exe-base>.rc, where   <exe-base> is =|swipl-win|=
to associate with the SWI-Prolog gui  application on Windows and =swipl=
on Unix/X11 platforms.
*/

:- op(200, fy,  user:(@)).
:- op(250, yfx, user:(?)).
:- op(990, xfx, user:(:=)).

:- multifile
	user:file_search_path/2.

:- dynamic
	pcehomestore_/1.
:- volatile
	pcehomestore_/1.

pcehome_(Home) :-
	pcehomestore_(Home), !.
pcehome_(Home) :-
	(   getenv('XPCEHOME', RawHome)
	;   current_prolog_flag(home, PlHome),
	    (   current_prolog_flag(xpce_version, Version),
		atom_concat('/xpce-', Version, Suffix)
	    ;   Suffix = '/xpce'
	    ),
	    atom_concat(PlHome, Suffix, RawHome)
	),
	exists_directory(RawHome), !,
	absolute_file_name(RawHome, Home),
	asserta(pcehomestore_(Home)).

user:file_search_path(pce, PceHome) :-
	pcehome_(PceHome).
user:file_search_path(library, pce('prolog/lib')).
user:file_search_path(foreign, pce(ArchLib)) :-
	current_prolog_flag(arch, Arch),
	atom_concat('lib/', Arch, ArchLib).

% We added a directory to the autoload directories: force reloading the
% index
:- reload_library_index.

gui_setup_ :-
	current_prolog_flag(gui, true), !.
gui_setup_ :-
	(   getenv('DISPLAY', _)
	;   current_prolog_flag(windows, true)
	), !,
	create_prolog_flag(gui, true, []),
	menu_setup_,
	editor_setup,
	load_files(user:library(swi_hooks), [silent(true)]).	% help, etc.

menu_setup_ :-					% plwin.exe menus
	current_prolog_flag(console_menu, true),
	use_module(user:library(win_menu)).
menu_setup_.

editor_setup :-
	current_prolog_flag(editor, default), !,
	set_prolog_flag(editor, pce_emacs).
editor_setup.

pce_setup_ :-
	current_prolog_flag(xpce, true), !.
pce_setup_ :-
	current_prolog_flag(argv, [Argv0|Args]),
	\+ memberchk('--nopce', Args),	% explicitely no XPCE
	pcehome_(PceHome),
	exists_directory(PceHome),
	gui_setup_,
	(   memberchk('--pce', Args)
	;   prolog_to_os_filename(Path, Argv0),
	    file_base_name(Path, Base),
	    '$apropos_match'(pce, Base)
	), !,
	load_files(user:library(pce), [silent(true)]),
	flag('$banner_goal', _, pce_welcome).
pce_setup_.

:- initialization pce_setup_.
