Konqueror "Ideas" Document (specification, general ideas)

Authors: 
  Waldo Bastian
  David Faure
  Simon Hausmann

Last modified: 7 Mar 1999

Intro
=====
I am trying to create a picture of how Konqueror should look 
like in KDE 2.0. If such a picture is clear, it is easier to 
build Konqueror such that it will feel like a consistent piece 
of software. This is of course only my view of the things. If 
someone has other views please let this know. It will help if 
a sort of common idea about the future of Konqueror exists.

KDE 2.0
=======
I think we should keep Konqueror a "browser": You can browse 
with it, and look at things. But when you want to _DO_ things, 
you will need a full-fledged application.

So you can view HTML with it.
You can view directories with it.
You can view text-files with it (read-only). (basically kless)
You can view images with it.
You can view mail-folders with it.
You can view newsgroups with it.
You can view xxx....

When you want more advanced manipulating options, modify things, 
or create things (writing a mail for instance) the "Real (tm)" 
application should pop up with its own menubars etc.

There is of course a thin line between viewing and modifying. 
With the file browser you want to be able to move/rename/delete 
files. So if we allow this functionality for file-browsing, we 
should also allow it for mail-browsing or news-browsing. 
(e.g. move/delete message cq. postings).

Creating does not really belong in a browser (apart from 
directories) because you will almost always need an application 
for this anyway. I seldom go to a directory to select "create xyz". 
Most of the time you start an application to create "xyz" and 
when you are done, you think of a nice place to store it.
(I think Microsoft wants us to believe otherwise, with their 
"document-orientated" Windows95 marketing) 
((Well, sometimes you are browsing and have a sudden urge to put 
a text-file like README in a directory. But for that you still 
need a text-editor. Just creating an empty file is of little use.))

Why is this important?
======================
There must be a clear distinction between what can be done with
Konqueror and what can be done with the application self. If there 
is no distinction we don't need Konqueror. 

Smooth integration
==================
With this Konqueror thing we have to tell the user a thing or 
two. We have to tell the user what he/she is doing: 
"Viewing a text-file", "Viewing a web-page", "Viewing a FTP-site", 
"Viewing e-mail". Because the options available to the user, depend 
on what he is doing: You can reply to e-mail. But you can't reply 
to a FTP-site. You can sort the entries of a FTP directory, but
you can't sort a web-page.

At the same time, we have to tell the user that he/she is "Viewing". 
If you want to edit the web-page, the web-editor comes up. If you 
want to reply to the e-mail, the mail-composer comes up. At that 
time the user is editing/changing/modyfying.

From the users point of view, the "viewing" part is konqueror. The
editing part is the application.

From the developers point of view, this can be different. The view
e-mail mode of Konqueror could (but it doesn't have to) be handled 
by the same instance of kmail as the "edit" mode of kmail. If this 
will be indeed the case should depend on programming considerations. 

What should not depend on programming considerations, is how it is
presented to the user. 

An Example
==========
Teodor Romeo Mihai wrote:
> Well, I've been working for a few months now on a Outloook-clone for
> KDE, handling mail/contacts/schedule/journal/notes/groups. It is a bit
> different from all KDE applications I've seen, being very close to
> Outlook in look&feel rather than KMail - which I find unusable.
> If you are seriously planning to put mail in kfm, maybe you should
> consider some kind of integration with an external mailer, in
> Explorer/Outlook style.

I'm serious about integrating mail-viewing in Konqueror. 
(From a user point of view).

I think it is a very bad idea to put mail-reading code in 
Konqueror. (From a developers point of view).

Konqueror should be able to display mail/mailboxes by embedding 
a mail-viewer. This mail-viewer should (in the case of a mail-viewer) 
be a seperate application from a developers point of view, but should
integrate seemless with Konqueror from the user point of view. This 
application can be kmail, a light version of kmail, or any other 
application that can display mails and supports this embedded KFM-view 
idea.

For viewing HTML or GIF files, Konqueror will most likely implement
the functionality itself. For the user it should not make any difference
if a view is implemented in Konqueror itself or in a seperate 
application.

The technology to embed the mail-viewer should be something CORBA based.
Most likely KOM/Openparts.

Konqueror should not become a program like Netscape Communicator:
A program that tries to do everything itself, and as result, does
everything very poorly.

Konqueror should do it better and the Unix way: Have speciliazed
components which are very good in their task. Konqueror provides 
the seemless integration of them and provides easy navigation 
abilities.


<tfischer> This means i can create an application (container) which host two parts, 
which are both ACTIVE, that 
  means i do not need to click the parts before they start repsonding.


Konqueror Views
===============
When an embedded part gets the focus (e.g. when the users clicks on it)
the mainwindow (shell) gets notified about this (the focus change).
You can "manually" activate a part by calling a method in the mainwindow 
interface. There can be only part that has the focus.
If you click on a non-activated part the click action itself is not "eaten up"
An activated part means the part has focus (keyboard, ...)
When you have "plain" parts they usually "have" their own GUI which get's 
"enabled" (created dynamically) when the part gets the focus
Normally this would bring a big problem inside konqueror
Because then we'd have lots of duplicated *bar creation code and 
stuff like this. That is the reason why in konqueror functionality is
implemented in openparts to have so called child parts.
A child part does _not_ have it's own GUI (as a normal openpart has)
instead the part part's gui is used.
We still allow konqueror views to have their own view specific gui elements
When a konqueror view (=part child) gets the focus the part parent 
(the mainwindow) will receive an event (eventChildGotFocus)
and this helps the mainwindow to send yet another event to the just 
activated view (=part) , an konqueror specific event
these events are described in konqueror.idl

The result is:
A konqueror view (that's important, the view must support this interface) 
can now specify it's own, view specific, menu entries in the edit/view menu 
plus it's own toolbar.

This integration is in fact not sooo seamless because:
whenever the use activates your khelpcenter part
a complete GUI "switch" will take place, meaning all the *bars from 
konqueror will be replaced by the *bars from the child view

Therefor another approach is developed:
The *bars of konqueror will contain entries for all child-views which are
inside the main-view. 

Care should be taken when multiple views want to add the same entries to
one of the *bars. 

In the case of a toolbar, only one entry could be added, the child-view which
has supplied this entry will be made active when his entry is used and will
get the event. If multiple child-views have provided this entry, the currently
active child will get the event. 

For the menubar, the entries will be presented grouped per child-view. The same
entry could be listed twice in the same menu, but listed under two differents
views.

Transcript
==========
<tronical> we have a usual mainwindow (looks/behaves quite like a current kfm window on the screen)
<tronical> now we have two views inside, on the left we've got an iconview
<tronical> and on the right we've got an htmlview
<tronical> now let's say the iconview wants to add a special entry in the common view menu
<tronical> no, let's say three entries: mini-/medium-/large icons
<tronical> and for the htmlview we've got (in the view menu as well):
<tronical> whatevery...hm...*thinking*, perhaps charset-selection of stuff like this
<tronical> now when the iconview is active the view menu will contain
<tronical> all the usual konqueror (mainwindow) entries (what could this be for example?) plus the three iconview 
  entries
<tronical> and when the users activates the htmlview then view menu will silently change
<Zogje> I think it makes sense to have both sets of entries in the view-menu at the sma time
<tronical> ok, well, it's possible to do this
* tfischer thinks zogje is right.
<tronical> there's no change in the design necessary
<Zogje> because the user just has a html-view and an inco-view on his screen, and has no idea which one is 
  "active"
<tronical> hm, you're right
<tronical> ok, but I think we can easily solve this:
<tronical> first we create the common konqueror menu entries
<tronical> then insertSeparator( -1 );
<Zogje> ack
<tronical> and then the first views' entries
<tronical> then another separator, ...and so on
<Zogje> yes
<Zogje> that seems quite good
<tronical> we might do something like this:
<tronical> common konqy entries
<tronical> separator
<tronical> dummy-not-doing-anything-entry named viewName()
<tronical> separator
<tronical> view entries
<tronical> yet another separator
<tronical> second view's name as dummy entries
<tronical> and so on
<Zogje> yes.. because if we have two html-views... you want to be able to select things for both independntly