Fix crash if key bindings specified in profile cannot be found. Improve
[personal-kdebase.git] / apps / konqueror / IDEAS
blob426b4d0064d26ec78fffeeae271c2d2acb36cd63
1 Konqueror "Ideas" Document (specification, general ideas)
3 Authors: 
4   Waldo Bastian
5   David Faure
6   Simon Hausmann
8 Last modified: 7 Mar 1999
10 Intro
11 =====
12 I am trying to create a picture of how Konqueror should look 
13 like in KDE 2.0. If such a picture is clear, it is easier to 
14 build Konqueror such that it will feel like a consistent piece 
15 of software. This is of course only my view of the things. If 
16 someone has other views please let this know. It will help if 
17 a sort of common idea about the future of Konqueror exists.
19 KDE 2.0
20 =======
21 I think we should keep Konqueror a "browser": You can browse 
22 with it, and look at things. But when you want to _DO_ things, 
23 you will need a full-fledged application.
25 So you can view HTML with it.
26 You can view directories with it.
27 You can view text-files with it (read-only). (basically kless)
28 You can view images with it.
29 You can view mail-folders with it.
30 You can view newsgroups with it.
31 You can view xxx....
33 When you want more advanced manipulating options, modify things, 
34 or create things (writing a mail for instance) the "Real (tm)" 
35 application should pop up with its own menubars etc.
37 There is of course a thin line between viewing and modifying. 
38 With the file browser you want to be able to move/rename/delete 
39 files. So if we allow this functionality for file-browsing, we 
40 should also allow it for mail-browsing or news-browsing. 
41 (e.g. move/delete message cq. postings).
43 Creating does not really belong in a browser (apart from 
44 directories) because you will almost always need an application 
45 for this anyway. I seldom go to a directory to select "create xyz". 
46 Most of the time you start an application to create "xyz" and 
47 when you are done, you think of a nice place to store it.
48 (I think Microsoft wants us to believe otherwise, with their 
49 "document-orientated" Windows95 marketing) 
50 ((Well, sometimes you are browsing and have a sudden urge to put 
51 a text-file like README in a directory. But for that you still 
52 need a text-editor. Just creating an empty file is of little use.))
54 Why is this important?
55 ======================
56 There must be a clear distinction between what can be done with
57 Konqueror and what can be done with the application self. If there 
58 is no distinction we don't need Konqueror. 
60 Smooth integration
61 ==================
62 With this Konqueror thing we have to tell the user a thing or 
63 two. We have to tell the user what he/she is doing: 
64 "Viewing a text-file", "Viewing a web-page", "Viewing a FTP-site", 
65 "Viewing e-mail". Because the options available to the user, depend 
66 on what he is doing: You can reply to e-mail. But you can't reply 
67 to a FTP-site. You can sort the entries of a FTP directory, but
68 you can't sort a web-page.
70 At the same time, we have to tell the user that he/she is "Viewing". 
71 If you want to edit the web-page, the web-editor comes up. If you 
72 want to reply to the e-mail, the mail-composer comes up. At that 
73 time the user is editing/changing/modyfying.
75 From the users point of view, the "viewing" part is konqueror. The
76 editing part is the application.
78 From the developers point of view, this can be different. The view
79 e-mail mode of Konqueror could (but it doesn't have to) be handled 
80 by the same instance of kmail as the "edit" mode of kmail. If this 
81 will be indeed the case should depend on programming considerations. 
83 What should not depend on programming considerations, is how it is
84 presented to the user. 
86 An Example
87 ==========
88 Teodor Romeo Mihai wrote:
89 > Well, I've been working for a few months now on a Outloook-clone for
90 > KDE, handling mail/contacts/schedule/journal/notes/groups. It is a bit
91 > different from all KDE applications I've seen, being very close to
92 > Outlook in look&feel rather than KMail - which I find unusable.
93 > If you are seriously planning to put mail in kfm, maybe you should
94 > consider some kind of integration with an external mailer, in
95 > Explorer/Outlook style.
97 I'm serious about integrating mail-viewing in Konqueror. 
98 (From a user point of view).
100 I think it is a very bad idea to put mail-reading code in 
101 Konqueror. (From a developers point of view).
103 Konqueror should be able to display mail/mailboxes by embedding 
104 a mail-viewer. This mail-viewer should (in the case of a mail-viewer) 
105 be a seperate application from a developers point of view, but should
106 integrate seemless with Konqueror from the user point of view. This 
107 application can be kmail, a light version of kmail, or any other 
108 application that can display mails and supports this embedded KFM-view 
109 idea.
111 For viewing HTML or GIF files, Konqueror will most likely implement
112 the functionality itself. For the user it should not make any difference
113 if a view is implemented in Konqueror itself or in a seperate 
114 application.
116 The technology to embed the mail-viewer should be something CORBA based.
117 Most likely KOM/Openparts.
119 Konqueror should not become a program like Netscape Communicator:
120 A program that tries to do everything itself, and as result, does
121 everything very poorly.
123 Konqueror should do it better and the Unix way: Have speciliazed
124 components which are very good in their task. Konqueror provides 
125 the seemless integration of them and provides easy navigation 
126 abilities.
129 <tfischer> This means i can create an application (container) which host two parts, 
130 which are both ACTIVE, that 
131   means i do not need to click the parts before they start repsonding.
134 Konqueror Views
135 ===============
136 When an embedded part gets the focus (e.g. when the users clicks on it)
137 the mainwindow (shell) gets notified about this (the focus change).
138 You can "manually" activate a part by calling a method in the mainwindow 
139 interface. There can be only part that has the focus.
140 If you click on a non-activated part the click action itself is not "eaten up"
141 An activated part means the part has focus (keyboard, ...)
142 When you have "plain" parts they usually "have" their own GUI which get's 
143 "enabled" (created dynamically) when the part gets the focus
144 Normally this would bring a big problem inside konqueror
145 Because then we'd have lots of duplicated *bar creation code and 
146 stuff like this. That is the reason why in konqueror functionality is
147 implemented in openparts to have so called child parts.
148 A child part does _not_ have it's own GUI (as a normal openpart has)
149 instead the part part's gui is used.
150 We still allow konqueror views to have their own view specific gui elements
151 When a konqueror view (=part child) gets the focus the part parent 
152 (the mainwindow) will receive an event (eventChildGotFocus)
153 and this helps the mainwindow to send yet another event to the just 
154 activated view (=part) , an konqueror specific event
155 these events are described in konqueror.idl
157 The result is:
158 A konqueror view (that's important, the view must support this interface) 
159 can now specify it's own, view specific, menu entries in the edit/view menu 
160 plus it's own toolbar.
162 This integration is in fact not sooo seamless because:
163 whenever the use activates your khelpcenter part
164 a complete GUI "switch" will take place, meaning all the *bars from 
165 konqueror will be replaced by the *bars from the child view
167 Therefor another approach is developed:
168 The *bars of konqueror will contain entries for all child-views which are
169 inside the main-view. 
171 Care should be taken when multiple views want to add the same entries to
172 one of the *bars. 
174 In the case of a toolbar, only one entry could be added, the child-view which
175 has supplied this entry will be made active when his entry is used and will
176 get the event. If multiple child-views have provided this entry, the currently
177 active child will get the event. 
179 For the menubar, the entries will be presented grouped per child-view. The same
180 entry could be listed twice in the same menu, but listed under two differents
181 views.
183 Transcript
184 ==========
185 <tronical> we have a usual mainwindow (looks/behaves quite like a current kfm window on the screen)
186 <tronical> now we have two views inside, on the left we've got an iconview
187 <tronical> and on the right we've got an htmlview
188 <tronical> now let's say the iconview wants to add a special entry in the common view menu
189 <tronical> no, let's say three entries: mini-/medium-/large icons
190 <tronical> and for the htmlview we've got (in the view menu as well):
191 <tronical> whatevery...hm...*thinking*, perhaps charset-selection of stuff like this
192 <tronical> now when the iconview is active the view menu will contain
193 <tronical> all the usual konqueror (mainwindow) entries (what could this be for example?) plus the three iconview 
194   entries
195 <tronical> and when the users activates the htmlview then view menu will silently change
196 <Zogje> I think it makes sense to have both sets of entries in the view-menu at the sma time
197 <tronical> ok, well, it's possible to do this
198 * tfischer thinks zogje is right.
199 <tronical> there's no change in the design necessary
200 <Zogje> because the user just has a html-view and an inco-view on his screen, and has no idea which one is 
201   "active"
202 <tronical> hm, you're right
203 <tronical> ok, but I think we can easily solve this:
204 <tronical> first we create the common konqueror menu entries
205 <tronical> then insertSeparator( -1 );
206 <Zogje> ack
207 <tronical> and then the first views' entries
208 <tronical> then another separator, ...and so on
209 <Zogje> yes
210 <Zogje> that seems quite good
211 <tronical> we might do something like this:
212 <tronical> common konqy entries
213 <tronical> separator
214 <tronical> dummy-not-doing-anything-entry named viewName()
215 <tronical> separator
216 <tronical> view entries
217 <tronical> yet another separator
218 <tronical> second view's name as dummy entries
219 <tronical> and so on
220 <Zogje> yes.. because if we have two html-views... you want to be able to select things for both independntly