1
0
Fork 0
cl-sites/guile.html_node/Dia-Objective.html

114 lines
4.8 KiB
HTML
Raw Normal View History

2024-12-17 12:49:28 +01:00
<!DOCTYPE html>
<html>
<!-- Created by GNU Texinfo 7.1, https://www.gnu.org/software/texinfo/ -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<!-- This manual documents Guile version 3.0.10.
Copyright (C) 1996-1997, 2000-2005, 2009-2023 Free Software Foundation,
Inc.
Copyright (C) 2021 Maxime Devos
Copyright (C) 2024 Tomas Volf
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with no
Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A
copy of the license is included in the section entitled "GNU Free
Documentation License." -->
<title>Dia Objective (Guile Reference Manual)</title>
<meta name="description" content="Dia Objective (Guile Reference Manual)">
<meta name="keywords" content="Dia Objective (Guile Reference Manual)">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content=".texi2any-real">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link href="index.html" rel="start" title="Top">
<link href="Concept-Index.html" rel="index" title="Concept Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Extending-Dia.html" rel="up" title="Extending Dia">
<link href="Dia-Steps.html" rel="next" title="Dia Steps">
<style type="text/css">
<!--
a.copiable-link {visibility: hidden; text-decoration: none; line-height: 0em}
div.example {margin-left: 3.2em}
span:hover a.copiable-link {visibility: visible}
ul.mark-bullet {list-style-type: disc}
-->
</style>
<link rel="stylesheet" type="text/css" href="https://www.gnu.org/software/gnulib/manual.css">
</head>
<body lang="en">
<div class="subsubsection-level-extent" id="Dia-Objective">
<div class="nav-panel">
<p>
Next: <a href="Dia-Steps.html" accesskey="n" rel="next">Four Steps Required to Add Guile</a>, Up: <a href="Extending-Dia.html" accesskey="u" rel="up">How One Might Extend Dia Using Guile</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<h4 class="subsubsection" id="Deciding-Why-You-Want-to-Add-Guile"><span>5.7.1.1 Deciding Why You Want to Add Guile<a class="copiable-link" href="#Deciding-Why-You-Want-to-Add-Guile"> &para;</a></span></h4>
<p>First off, you should understand why you want to add Guile to Dia at
all, and that means forming a picture of what Dia does and how it does
it. So, what are the constituents of the Dia application?
</p>
<ul class="itemize mark-bullet">
<li>Most importantly, the <em class="dfn">application domain objects</em> &mdash; in other
words, the concepts that differentiate Dia from another application such
as a word processor or spreadsheet: shapes, templates, connectors,
pages, plus the properties of all these things.
</li><li>The code that manages the graphical face of the application, including
the layout and display of the objects above.
</li><li>The code that handles input events, which indicate that the application
user is wanting to do something.
</li></ul>
<p>(In other words, a textbook example of the <em class="dfn">model - view -
controller</em> paradigm.)
</p>
<p>Next question: how will Dia benefit once the Guile integration is
complete? Several (positive!) answers are possible here, and the choice
is obviously up to the application developers. Still, one answer is
that the main benefit will be the ability to manipulate Dia&rsquo;s
application domain objects from Scheme.
</p>
<p>Suppose that Dia made a set of procedures available in Scheme,
representing the most basic operations on objects such as shapes,
connectors, and so on. Using Scheme, the application user could then
write code that builds upon these basic operations to create more
complex procedures. For example, given basic procedures to enumerate
the objects on a page, to determine whether an object is a square, and
to change the fill pattern of a single shape, the user can write a
Scheme procedure to change the fill pattern of all squares on the
current page:
</p>
<div class="example lisp">
<pre class="lisp-preformatted">(define (change-squares'-fill-pattern new-pattern)
(for-each-shape current-page
(lambda (shape)
(if (square? shape)
(change-fill-pattern shape new-pattern)))))
</pre></div>
</div>
<hr>
<div class="nav-panel">
<p>
Next: <a href="Dia-Steps.html">Four Steps Required to Add Guile</a>, Up: <a href="Extending-Dia.html">How One Might Extend Dia Using Guile</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html" title="Index" rel="index">Index</a>]</p>
</div>
</body>
</html>