|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: P T
Length: 4540 (0x11bc) Types: TextFile Names: »PSFigView.c«
└─⟦8648bda34⟧ Bits:30007244 EUUGD5_II: X11R5 └─⟦87c3ac0e0⟧ »./contrib-3/contrib-3.00« └─⟦de8ce1454⟧ └─⟦this⟧ »contrib/lib/iv/src/bin/doc/PSFigView.c«
/* * Copyright (c) 1991 Stanford University * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided * that the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the name of Stanford not be used in advertising or * publicity pertaining to distribution of the software without specific, * written prior permission. Stanford makes no representations about * the suitability of this software for any purpose. It is provided "as is" * without express or implied warranty. * * STANFORD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. * IN NO EVENT SHALL STANFORD BE LIABLE FOR ANY SPECIAL, INDIRECT OR * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ /* * PSFigView */ #include "PSFigView.h" #include "Application.h" #include "DocViewer.h" #include "PSFigItem.h" #include "properties.h" #include <InterViews/listener.h> #include <InterViews/margin.h> #include <InterViews/patch.h> #include <InterViews/world.h> #include <InterViews/xymarker.h> #include <string.h> PSFigView::PSFigView ( DocumentViewer* viewer, ItemView* parent, PSFigItem* figure ) : ItemView(viewer, parent) { _figure = figure; _figure->ref(); _figure->attach(this); const char* init_mode = World::current()->property_value(INIT_PSFIG_MODE); if (init_mode != nil && strcmp(init_mode, "draft") == 0) { _mode = PSDraft; } else if (init_mode != nil && strcmp(init_mode, "final") == 0) { _mode = PSFinal; } else { _mode = PSDraft; } _patch = new Patch(nil); Color* overlay; Color* underlay; _viewer->highlight_colors(ACTIVE_HIGHLIGHT_COLOR, overlay, underlay); _active_marker = new XYMarker(_patch, overlay, underlay); _listener->body(_active_marker); _listener->button(true, Event::left); _active = false; } PSFigView::~PSFigView () { if (_active) { _viewer->focus(nil); } _figure->detach(this); _figure->unref(); } void PSFigView::graphic_changed () { build(); } void PSFigView::update () { _patch->redraw(); _patch->reallocate(); _patch->redraw(); mark_selection(); } void PSFigView::build () { _patch->body(new Margin(_figure->graphic(_mode, this), 5, 5)); } void PSFigView::repair () { _figure->notify(); } boolean PSFigView::command (const char* command) { if (strncmp(command, "graphic", 7) == 0) { const char* keyword = command+8; if (strcmp(keyword, "draft") == 0) { if (_mode != PSDraft) { _mode = PSDraft; build(); update(); return false; } } else if (strcmp(keyword, "final") == 0) { if (_mode != PSFinal) { _mode = PSFinal; build(); update(); return false; } } else if (strcmp(keyword, "reread") == 0) { _figure->change_graphic(); return true; } else if (strcmp(keyword, "modify") == 0) { const char* old_params = _figure->parameters(); const char* new_params = _viewer->application()->ask( _viewer, "Modify figure paramters:", old_params ); if (new_params != nil) { _figure->parameters(new_params); return true; } else { return false; } } } return ItemView::command(command); } void PSFigView::mark_selection () { if (_active) { const Allocation& a = _patch->allocation(); _active_marker->mark(a.left(), a.bottom(), a.right(), a.top()); } else { _active_marker->unmark(); } } void PSFigView::activate (boolean active) { if (_active != active) { _active = active; if (_active) { World* w = World::current(); w->flush(); _viewer->menubar(w->property_value(DEFAULT_PSFIG_MENUBAR)); _viewer->keymap(w->property_value(DEFAULT_PSFIG_KEYMAP)); w->flush(); } mark_selection(); } }