Parent Directory | Revision Log
|Links to HEAD:||(view) (annotate)|
Fix dynamic extent declarations in with-output-as-gadget.
Nicer gadget range handling, and handle stream designators in w-o-a-g.
The default value of a list-pane should be NIL.
Fix list panes with multi-element-selection.
Specify :orientation default initarg for radio button gadgets.
Fixed division-by-zero bug in scrollbar code.
Attempt at cleaning up the text-field and text-editor gadget mess. Drei/Goatee selection now more elegant and complex setups (scrolling, minibuffer for Drei) now handled well without relying on undocumented McCLIM quirks. The various size-specification-features should also work now.
Default value of toggle button to nil.
Fixed the method browser. * gadgets.lisp (value-changed-callback): Move method from meta-list-pane down to generic-list-pane where it belongs.
Trivial changes (change :max-height of push-button-pane to +fill+, move functions around).
As an extension, recognize an initarg :PRESENTATION-TYPE-KEY to the list pane. Like :VALUE-KEY and :NAME-KEY, it can specify a function to be called for each list item. The presentation type key can return NIL, or a presentation type to be used for the item. If such a type is returned, selection of the item will throw a presentation of that type before the value-change callback is called. In addition, right click will be recognized on the list pane and open a presentation menu. * gadgets.lisp (META-LIST-PANE): New slot presentation-type-key. ((VALUE-CHANGED-CALLBACK :BEFORE META-LIST-PANE)): Optionally throw a presentation. (AD-HOC-PRESENTATION, OUTPUT-RECORD-HIT-DETECTION-RECTANGLE*): New class and method. (GENERIC-LIST-PANE-HANDLE-RIGHT-CLICK, META-LIST-PANE-CALL-PRESENTATION-MENU): New functions. ((HANDLE-EVENT GENERIC-LIST-PANE)): Handle right clicks. * Examples/demodemo.lisp (list-pane-test): Modified to demonstrate presentation-type-key. * Backends/gtkairo/event.lisp (HANDLE-EVENT-P): New generic function. (BUTTON-HANDLER): Trap the event only if handle-event-p returns true. * Backends/gtkairo/gadgets.lisp ((HANDLE-EVENT-P GTK-LIST), (CONNECT-NATIVE-SIGNALS GTK-LIST)): Handle right clicks. (GTK-LIST-ONE-VALUE): New function. ((HANDLE-EVENT GTK-LIST)): Call meta-list-pane-call-presentation-menu.
Implement (SETF LIST-PANE-ITEMS) as discussed on IRC. * package.lisp (CLIM-EXTENSIONS): Export LIST-PANE-ITEMS. * Examples/demodemo.lisp: Extend the LIST-TEST to demonstrate the new functionality. * gadgets.lisp ((SETF LIST-PANE-ITEMS)): Add a new generic function. Implement it for GENERIC-LIST-PANE, with some general code specialized on META-LIST-PANE. * Backends/gtkairo/gadgets.lisp: Implement (SETF LIST-PANE-ITEMS) for GTK-LIST, too. * Backends/gtkairo/ffi.lisp: regenerated.
Committed changes necessary to support Drei (and non-Goatee input editors at all). Also some indirection permitting run-time selection of editor substrate and the code for :text-editor and :text-field gadgets.
* gadgets.lisp (dis-/armed-callback text-field-pane): Added a hack to ensure initialization of the text field before it is being used. Needed to make the gadget test start up with the gtkairo backend.
Fix up scroll bars in Beagle. Use the high level gadget events to signal scroll bar changes to the application. Document the unintuitive scroll-bar-thumb-size slot in the scroll-bar gadget.
Take out dependencies on case in symbol names. This makes McCLIM sort of work in ACL's so-called modern mode; there have been some CLX fixes recently that may get it all the way there. Clean up events.lisp. Add a callback-event, which will be used in ports that get high-level gadget notifications in the event process and need to deliver them to applications. Changed the implementation of scroll bars. When the drag callback is called, just move the sheet; assume that the gadget itself has updated the value and the graphic representation. add a scroll-bar-values interface that gets and sets all scroll bar values and only updates the bar once. This will break the Beagle back end momentarily.
Patch from Paul Werkowski for with-output-as-gadget. Still not good, but better, as I understand it.
Move most protocol class definitions into protocol-classes.lisp, which is compiled and loaded early. Some class definitions, which had slot definitions that I didn't have the stomach to tease apart, stayed behind. Replace the presentation documentation state mechanism with updating-output so that other functions / programs can write to the pointer documentation area and not screw things up. We still use the state to actually print the documentation.
Fix some bit rot in the Beagle backend; not quite there.
- added more DEFGENERICs - fiddled with a few IGNORE declarations - with CMUCL, macros no longer attempt to declare special variables IGNORABLE
Some attempts to make the different gadget classes match look. PUSH-BUTTON-PANE, TOGGLE-BUTTON-PANE: Changed default spacing initargs to get a better match in look. GENERIC-OPTION-PANE: - Space is computed a little different now to match the look of the push button. - The widget size now is always square and matched to the overall height of the optione pane. - We circmumvent the flawed behavior of DRAW-TEXT* and compute the base line on our own.
SCROLL-BAR-PANE Complete overhaul: - The blitter hack now works, because we round coordinates to integers, COPY-AREA was fixed for case we work under a transformation and finally because we get :graphcis-exposure events. - We use poor man's incremental redisplay for updating the scroll bar display. So now, when changing the value of a scroll bar without actually changing it, we don't have a flickering display anymore. - The thumb bed is drawn in *3D-INNER-COLOR*, which is slightly darker than the background of the thumb itself. This leads to more clearly visible thumb. - The thumb won't get smaller than +MINIMUM-THUMB-SIZE-IN-PIXELS+, so a really large stream pane, won't cause such an usability problem anymore.
Draw hollow or filled cursor in text-field gadget, depending on whether the gadget is armed or not.
Added rpgoldman's docstring for box-adjuster gadget.
Answer anonymous wish for an :active-p initarg, but call it :active instead, as classic CLIM appeared to. Added documentation to the list-pane and option-pane listing what is left to be done, some performance considerations, user behavior, and extensions beyond the CLIM spec. Various fixes and cleanups to the list and option panes. Made it capable of handling an unbound gadget-value. Cleaned up the (still) scary event loop that manages the popup menu for option-pane. Fixed some bugs whose details I've forgotten. Also fixed bogus slot type declaration reported by David Christiansen last month.
Fix gadget output records after recent coordinate changes, with help from Anthony Juckel and Mikemac.
Add standard-sheet-input-mixin to superclasses of generic-list-pane in order to make it work within the popup menu of the option-pane in unithreaded SBCL (and presumably other non-MP lisps). This feels like a hack.
Fix incorrect default mode of list pane. Provide some tactile feedback by changing the pointer cursor within box-adjuster-gadget.
Attempt to improve clim-extensions:box-adjuster-gadget - capture the space requirements of the left/right peers when the button is pressed, so that computing their new sizes can be done absolutely based on distance/direction the pointer has travelled overall and their original space requirements, rather than relatively using the distance travelled between motion events applied to their current space requirement. This seems to keep things on screen in better sync with the cursor.
In various mixins that repaint the gadget in response to events, supply (or (pane-viewport-region gadget) (sheet-region gadget))) rather than +everywhere+ to improve performance for large sheets embedded in a scroller-pane.
Oops - fix to generic-option-pane so that the value-changed-callback is invoked.
Implementation of OPTION-PANE, with apologies to Gilbert Baumann. Change gadget-highlight-background to blend with white rather than +paleturquoise+. Adjust superclasses of meta-list-pane, generic-list-pane, so that generic-option-pane can also use meta-list-pane. Minor refactoring and fixes to generic-list-pane. Implementation of generic-option-pane, using generic-list-pane in a popup window. Supports full set of options (mode, value-key, name-key). Appears GTK2-ish, and should behave as people expect. List and option panes should be scalable to at around a thousand items (worst case), and there is plenty of room for improvement.
In tracking-pointer, don't discard the event when calling the handler. Fix bug induced by clicking presentations outside of menu-choose menus. Make mouse-wheel scrolling work when mixed into arbitrary panes. Defined new GF SCROLL-QUANTUM to control unit of scrolling (defaults to text-height on stream panes, 10 pixels elsewhere). Rework CLX frame-manager pane lookup - choose by presense of defined classes rather than mere existance of a symbol. Added a function DEFINE-ABSTRACT-PANE-MAPPING to specify alternate mappings to concrete panes (such as GENERIC-OPTION-PANE, GENERIC-LIST-PANE, which were not handled correctly before). Hopefully this is a step toward a future mechanism that addresses the needs of multiple frame-managers and themes. Implement (reimplement?) GENERIC-LIST-PANE based loosely on the existing code. Supports single or multiple-item selection modes, toggling items via control key (with an optional :prefer-single-item initarg which causes a :nonexclusive list to prefer selecting single items without disallowing multiple selections). Selection of item ranges via the shift modifier. Scroll wheel support. Supports :one-of and :some-of aliases for :exclusive and :non-exclusive (Lispworks compatibility).
Menubar and gadget changes: In deactivated gadgets, 'engrave' the text rather than simply dimming the label. Menu bars now use deactivate-gadget on the menu-buttons to signify disabled commands. Implemented divider menu items, with an optional label. Implemented :function menu items. For submenu buttons in vertical menus, draw a little arrow to the right of the name to distinguish them from regular menu items.
Initial hacks for text-editor
Cleaned up the frame layout code. It's now possible to change layouts on the fly. Got rid of frame-pane and replaced it with a proper definition of frame-panes that conforms to the Spec. All the frame pane and layout functions in the spec should be implemented now. In presentation-replace-input, checked in a fix that I thought was already in.
fixed typo per Paul Werkowski
Christophe Rhodes' improved defgeneric definitions. Early work on the partial command processor.
Various changes for WITH-OUTPUT-AS-GADGET. Here's what works: * Embedding gadgets in stream panes. * Gadget panes will be moved if their containing output record is moved, either directly or by moving a parent. * Deleting the gadget-output-record or its parents will remove the gadget. * Adding the gadget-output-record back into a sheet will restore the gadget. What needs to be done: * Figure out how to integrate gadgets with presentations Summary of changes: * Two new methods, NOTE-OUTPUT-RECORD-[GOT,LOST]-SHEET, needed to make adding and deleting of gadget-output-records work. They could use better names =) * Changes to ADD-OUTPUT-RECORD, DELETE-OUTPUT-RECORD, and CLEAR-OUTPUT-RECORD to support above methods. * Output histories now have a slot to keep track of their sheet. * Removed some code that had snuck into panes.lisp related to input focus and changable cursor shapes (which I've never comitted). * Made clim-stream-pane inherit sheet-multiple-child-mixin. * Removed redundant definition of the OUTPUT-HISTORY slot from stream panes, and the two uses of the PANE-OUTPUT-HISTORY accessor it defines (which isn't in the spec nor the vendor CLIMs AFAIK). Also changes to the slider gadget, which I was using in my test case: * Wrote a COMPOSE-SPACE method to request a more appropriate size depending on gadget orientation. * Merged code in the repaint method that was duplicated for horizontal and verical orientations. * Fill the background with PANE-BACKGROUND instead of GADGET-CURRENT-COLOR. * Commented out slot definition in basic-gadget which caused it to get a white background instead of the default frmo basic-pane. There was a comment there about Lispworks compatibility... but hopefully no one misses this.
Fixed bug in CONVERT-VALUE-TO-POSITION for the slider gadget, reported by Philip Knodle. Decided to do things slightly differently than his patch: * When the range of the slider is zero, position the button in the center.
Fixed a bug in the text-field-pane - when specifiying an initial value for the text field, it didn't appear until you cause the pane to be repainted. The goatee area for the field was being initialized in an :after method on handle-repaint. * Removed the unused EXPOSED slot. * Changed the HANDLE-REPAINT :AFTER method to a :BEFORE method * Test against (area pane) instead of (exposed pane). Since the latter was not being set, a new goatee area was being created on every repaint.
Be sure to specify a max size on the major dimension within COMPOSE-SPACE for the box-adjuster-gadget, so that the gadget doesn't accidentally grow if one of the resized panes isn't cooperating.
Added a new gadget, clim-extensions:box-adjuster-gadget. You can put this within a vertical/horizontal box or rack, and it will adjust the size of the neighboring clients in the box. The implementation is not perfect, but it works pretty well, considering I've made no changes to the box widgets to accomodate it.
make all code lowercase for ACL's java mode - leave gensyms alone
make all of the package names passed to in-package be lowercase keywords for ACL's java mode
make all #+/#- conditionals lowercase for ACLs java mode
remove redundant declarations and definitions
I changed the default text-style of some gadgets to (:sans-serif nil nil) in an attempt to look more "standard".
MENU-BUTTON-PANE: the label is aligend left with a bit a gutter now
language support for text-styles, korean font support, support for 16 bit fonts, support for font composition, support for timer events, some cosmetic changes, support for unicode characters, etc. A bit much at once, and hopefully it won't break for anyone who isn't using unicode enabled cmucl.
Added lowering to complement raising. Fixed raising and lowering to draw their backgrounds. Fixed viewport to allocate-space for its child - maybe needs fixing somewhere else.
* Added quantization of SLIDER-PANE.
Editable text fields. Support for the OR presentation type. Added :mcclim to *features*. This was done in support of Jochen Schmidt's weird-irc IRC client, which now works reasonably well under McCLIM, though it isn't as pretty as some of the screenshots at http://www.dataheaven.de/weird-irc/.
Changed some specializations on STANDARD-GADGET into BASIC-GADGET. SCROLL-BAR work: . started to hack an alternative implemention, which uses an extra sheet for the thumb for performance. -- code not yet enabled. . page-up callback now is unaccessible.
* Added keyword arguments to COMPOSE-SPACE.
More removal of spurious warnings by - adding more declarations to decls.lisp - moving common code from gadgets.lisp to panes.lisp - also moving draw-design to graphics.lisp
Besides some support for enabled/disabled sheets in panes.lisp and removal of some unused code, the most notable change is: - removal of all method defintions like (defmethod handle-event ((foo foo-pane) (event window-repaint-event)) (repaint-sheet foo (event-region event)) - Switched last remaining REPAINT-SHEET methods into HANDLE-REPAINT, since HANDLE-REPAINT is where you define repainting. REPAINT-SHEET is for forcing a repaint not for implementing a repaint. [Although I am German my reading comprehension should be just good enough to understand the relevant chapter of the specification]. This breaks CLIM-FIG again, refer to my posting to the mailing list.
gadgets.lisp now compiles without compiler warnings.
General cleaning up. Fixed pixie-toggle-buttons, rebuild pixie-sliders, and pixie-scroll-bar (unfinished). Cleaned up Examples/gadget-test to use the correct constructors.
Sundry fixes to run without multiprocessing support. Added images/ to hold bitmaps for tests. Added looks/ to hold neutral look-and-feel realizer packages. Added Examples/gadget-test to test many gadgets with a look and feel. Added a pixie look and feel, and a pixie/clx to work with the clx backend. Added drawing support in the CLX backend for ovals and circles. Fixed pixmaps to work with with-output-to-pixmap with draw-image, etc. Moved sheet-leaf-mixin to standard-gadget-pane so it doesn't break radio-box-pane, etc. Misc fixes.
Make a global choice, based on multiprocessing or not, whether events should be handled immediately or queued up to be serviced by another process. The choice is implemented by the classes clim-sheet-input-mixin and clim-repainting-mixin, from which all panes inherit. These classes' superclasses are conditionalized on whether or not the implementation is capable of multiprocessing. When multiprocessing there is a single event queue per frame. This is implemented by queue-event on pane classes. The event loop is implemented in stream-input-wait. In single processing mode, stream-input-wait calls process-next-event and handles events immediately. When multiprocessing, stream-input-wait reads events from the frame event queue and handles them. The function clim-extensions:simple-event-loop is supplied for applications which do not loop reading from a stream; various examples have been changed to use it. In stream-read-gesture/stream-input-wait the input-wait-test function is not expected to block anymore; nor is the input-wait-handler expected to dispatch events. input-wait-handler is responsible for consuming events that should not be seen by anyone else. input-context-wait-test and highlight-applicable-presentation have been rewritten to reflect this. The adjustable-array buffer for extended-input-streams has been added back in. A typo in %event-matches-gesture has been fixed. Default methods for map-over-output-records-containing-position and map-over-output-records-overlapping-region have been added. The cursor implementation has been broken out into a cursor-mixin so I can snarf it for Goatee :)
I removed the quoted expression in (setf gadget-current-color) so that colored gadgets change immediately when their color is altered. I still don't understand why this expression was quoted. I added standard-space-requirement-options-mixin to the list of superclasses of menu-button-pane, and added a method for compose-space on menu-button-pane. Now, menu buttons have roughly the right size again but the don't yet change colors according to whether they are armed or not. I suspect it is a question of adding enter/exit-arms/disarms-mixin to the list of superclasses, but I haven't had time to do that yet. Now, there is considerable code duplication between the compose-space methods of push-button and menu-button. I am not sure how to factor this yet.
Checkin to get context sensitive input working with multi-threaded process-next-event. Set input focus in run-frame-top-level. Assume that someday, in the presence of multiple frames, we'll do the right thing with switching the input focus from frame to frame. Added a frame-intercept-event-queue to frames. process-next-event examines the frame associated with the pane that has input focus and puts device events on that frame's queue if desired. Rewrote stream-input-wait, stream-read-gesture and the with-input-context input-test and input-handler functions per mikemac's suggestions. The with-input-context stuff uses the intercept queue mechanism now. Fixed a typo in gadgets.lisp.
LABELLED-GADGET Default label now is "" DRAW-LABEL* Work around for ENGRAFT-MEDIUM not doing the right thing. RADIO-BOX, CHECK-BOX Got rid of REORDER-SHEETS since it is not needed anymore.
Changed the argument precedence order of all XYZ-CALLBACK generic functions so that the client arguments comes first and the gadget argument comes last. So that something like below actually behaves as intended. (define-application-frame foo () ...) (defmethod activate-callback (gadget (frame foo) (id (eql :okay))) ...)
RADIO-BOX CHECK-BOX Display items in the order given.
To much too document in detail. Just the highlights: - reordered code quite a bit. - TOGGLE-BUTTON: The toggle button now looks like in Motif and appearence depends on indicator-type. - RADIO-BOX, CHECK-BOX implemented - LIST-PANE moved here from panes.lisp - arm/disarm-repaint-mixin value-changed-repaint-mixin enter/exit-arms/disarms-mixin changing-label-invokes-layout-protocol-mixin new mixin classes for concret gadgets
GADGET class PERMANENT-MEDIUM-SHEET-OUTPUT-MIXIN gone. At a lot of places: HANDLE-REPAINT instead of REPAINT-SHEET. Use HANDLE-REPAINT to implement redrawing! HANDLE-EVENT specialized on WINDOW-REPAINT-EVENT elided as this should be handled by the repaint protocol. Some callbacks bind *APPLICATION-FRAME* now. TEXT-FIELDs no longer use TEXT-SIZE for calculation of their preferred height, but TEXT-STYLE-ASCENT/DESCENT.
- spend SCROLL-BAR-THUMB-SIZE
- 3D-BORDER-MIXIN: new class - DRAW-BORDERED-POLYGON: new function - SCROLL-BAR, SCROLL-BAR-GADGET Spend more Motif-ish scroll bars.
updated copyright dates for me
more scrollbar work
beautifying the scroll-bar-pane
Made all gadgets have a permanent medium to decrease X traffic.
Suppressed the method allocate-space on scroll-bar-pane. This method was useless, and used the former set-width-and-height function, thus provoking an error.
Suppressed the medium argument in the handle-repaint method. It has been removed in the new spec version, and wasn't used in the code anyway. Added the new basic-sheet class, and changed a few things in the code accordingly. Modified the definition of some functions, and added new ones, namely : map-over-sheets map-over-sheets-containing-position map-over-sheets-overlapping-region move-sheet resize-sheet move-and-resize-sheet Moved the repaint protocol code in a stand-alone file, because it need to have access to window-repaint-event defined in the events code.
- Added the :decimal-places initarg in slider-pane. - Modified the clim-fig example to use it.
Removed the (window-clear pane) call on text-field-pane, which caused the calculator example to crash. Actually, window-clear is only defined on clim-stream-pane, ie panes with an output-history.
The former mirrored-sheet class is now mirrored-sheet-mixin. Changed the name in the existing code and made the necessary adaptations. Renamed the unrealize-mirror function, which was previously only used internally by CLIM, but is now publicly advertised in the spec as destroy-mirror.
The mixin classes: - standard-repaint-mixin, - immediate-repaint-mixin, and - mute-repaint-mixin should actually be named (according to the new version of the Spec): - standard-repainting-mixin, - immediate-repainting-mixin and - sheet-mute-repainting-mixin.
Implementation of scroll-bars based on a code made by Julien Bonifante. Modifications of his code include: - Modified the name of the scroll-bar's callbacks from "drag" to "scroll", according to the new Spec. - Simplified the slots of SCROLL-BAR-PANE, using the inherited slots. - Added HANDLE-EVENT functions to control the scrolling. Modifications of panes.lisp: - Modified the creation of scroll-bars in a scrolling environment. - Modified the scrolling functions and clim-stream-pane functions.
Added the macro with-special-choices. Its purpose is to add backend dependant drawing optimizations in repaint protocol. For example, with CLX, it adds the double-buffering thanks to pixmaps by calling the macro with-double-buffering. Julien.
Minor bug about initialize-instance :before for menu-button-pane fixed. Julien
* WITH-OUTPUT-AS-GADGET: if STREAM is T, use *STANDARD-OUTPUT*
Added the possibility to have horizontal sliders. Julien
Make the slider-pane looking better.
Minor bug for toggle-button fixed.
Added image as label for gadgets, fixed minor bugs with push-button and toggle-button, added orientation notion for slider-pane, and finally added the use of align-x, align-y and label-text-style of labelled-gadget
Changes with gadget-color-mixin and examples adaptation
Method of double-buffering added thanks to pixmaps
slider-pane with horizontal orientation added
Radio-box fixed and finished - Creation of the client-warning protocol
Sorry for beeing cvs and not hatchond but I forgot to update my login script. After the compose and allocate protocols minor modifications have been done in the gadgets for beeing complients.
bug about pointer-enter et pointer-motion fixed
fixed bug in the slider-pane about the armed slot and the handle-event with pointer-exit-event
bug fixes by Paul Werkowski
Added new method for compose-space on labelled-gadget to use space needed by label. Replaces subclass ordering of push-button, toggle-button, menu-button, slider-gadget, so that labelled-gadget-mixin is first, giving a default method for compose-space. Added method for compose-space on text-field-pane. Replaced method for compute-space on text-editor-pane by method for compose-space.
Removed slot `destroyed' from menu buttons, since it is no longer needed.
removed scrollbar-pane and added scroll-bar-pane
Added slot `destroyed' to menu-button class. X11 generates pointer-exit events after unmap events, so need to detect that menu-button is actually destroyed before acting on pointer-exit event.
Removed multiple definition of generic function drag-callback. Also changed the name of its generic argument to `pane'.
Changed repaint functions to assume region of gadget to have its upper left corner at coordinate (0,0). Before, layout panes did not make sure that was the case. This has now been fixed. Removed unused and misplaced definitions of clx-specific classes. Temporarily removed event handling for menu buttons. A new version will soon be provided that works well with menu bars and menus in general.
Removed slot accessors of slots visible only internally. Improved drawing of gadgets. Altered inheritance so that gadgets are no longer clim-stream-panes. Merged mulitple setfs into one. Factored calls to dispatch-repaint. Improved support for slider panes (handle-event).
Removed duplicated delcaration of defgeneric drag-callback.
Added code to handle repaint and to set gadget value of text-field-pane.
Error in with-radio-box corrected
Altered default gray values in gadgets to resemble those of GTK.
Improved color management.
Fixed drawing of push-button gadget.
Fixed lambda list in macro with-radio-box.
Added many more gadgets. Added repaint protocol.
check in Arthur Lemmens' <email@example.com> gadget code
This form allows you to request diffs between any two revisions of this file. For each of the two "sides" of the diff, select a symbolic revision name using the selection box, or choose 'Use Text Field' and enter a numeric revision.
|Powered by ViewVC 1.1.5|