diff options
Diffstat (limited to 'examples/demo/textdrawing')
29 files changed, 1309 insertions, 0 deletions
diff --git a/examples/demo/textdrawing/bidi.txt b/examples/demo/textdrawing/bidi.txt new file mode 100644 index 0000000..7674ab0 --- /dev/null +++ b/examples/demo/textdrawing/bidi.txt @@ -0,0 +1,6 @@ +This page contains text in many languages, advertising the Tenth International Unicode Conference. The page is encoded using Unicode UTF-8 and to view it you need a Unicode-capable browser. If you don't have access to such a browser, you may want to visit the individual Web pages, each containing the text in a single language. The text on these Web pages was provided by volunteer translators (see the Credits page). If you would like to offer a language we don't yet have, or have a comment about one of the existing pages, please mail us. + +אירופה, תוכנה והאינטרנט: Unicode יוצא לשוק העולמי הירשמו כעת לכנס Unicode הבינלאומי העשירי, שייערך בין התאריכים 12־10 במרץ 1997, במיינץ שבגרמניה. בכנס ישתתפו מומחים מכל ענפי התעשייה בנושא האינטרנט העולמי וה־Unicode, בהתאמה לשוק הבינלאומי והמקומי, ביישום Unicode במערכות הפעלה וביישומים, בגופנים, בפריסת טקסט ובמחשוב רב־לשוני. some english inbetween כאשר העולם רוצה לדבר, הוא מדבר ב־Unicode + +أوروبا, برمجيات الحاسوب + انترنيت : some english تصبح عالميا مع يونيكود more english تسجّل الآن لحضور المؤتمر الدولي العاشر ليونيكود, الذي سيعقد في 10-12 آذار 1997 بمدينة ماينتس, ألمانيا. وسيجمع المؤتمر بين خبراء من كافة قطاعات الصناعة على الشبكة العالمية انترنيت ويونيكود, حيث ستتم, على الصعيدين الدولي والمحلي على حد سواء مناقشة سبل استخدام يونكود في النظم القائمة وفيما يخص التطبيقات الحاسوبية, الخطوط, تصميم النصوص والحوسبة متعددة اللغات. english عندما يريد العالم أن يتكلّم, فهو يتحدّث بلغة يونيكود. english... + diff --git a/examples/demo/textdrawing/editcopy.png b/examples/demo/textdrawing/editcopy.png Binary files differnew file mode 100644 index 0000000..2f931cb --- /dev/null +++ b/examples/demo/textdrawing/editcopy.png diff --git a/examples/demo/textdrawing/editcut.png b/examples/demo/textdrawing/editcut.png Binary files differnew file mode 100644 index 0000000..54c8e14 --- /dev/null +++ b/examples/demo/textdrawing/editcut.png diff --git a/examples/demo/textdrawing/editdelete.png b/examples/demo/textdrawing/editdelete.png Binary files differnew file mode 100644 index 0000000..9f0491d --- /dev/null +++ b/examples/demo/textdrawing/editdelete.png diff --git a/examples/demo/textdrawing/editlower.png b/examples/demo/textdrawing/editlower.png Binary files differnew file mode 100644 index 0000000..50605f2 --- /dev/null +++ b/examples/demo/textdrawing/editlower.png diff --git a/examples/demo/textdrawing/editpaste.png b/examples/demo/textdrawing/editpaste.png Binary files differnew file mode 100644 index 0000000..b1b7f85 --- /dev/null +++ b/examples/demo/textdrawing/editpaste.png diff --git a/examples/demo/textdrawing/editraise.png b/examples/demo/textdrawing/editraise.png Binary files differnew file mode 100644 index 0000000..f157251 --- /dev/null +++ b/examples/demo/textdrawing/editraise.png diff --git a/examples/demo/textdrawing/example.html b/examples/demo/textdrawing/example.html new file mode 100644 index 0000000..b538002 --- /dev/null +++ b/examples/demo/textdrawing/example.html @@ -0,0 +1,340 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head> +<title>Qt Toolkit - QLabel Class</title><style type="text/css"><!-- +h3.fn,span.fn { margin-left: 1cm; text-indent: -1cm; } +a:link { color: #004faf; text-decoration: none } +a:visited { color: #672967; text-decoration: none }body { background: white; color: black; } +--></style> +</head><body bgcolor="#ffffff"> + +<h1 align=center>QLabel Class Reference</h1><br clear="all"> +<p> +The QLabel widget provides a static information display +<a href="#details">More...</a> +<p> +<code>#include <<a href="qlabel-h.html">qlabel.h</a>></code> +<p> +Inherits <a href="qframe.html">QFrame</a>. +<p><a href="qlabel-members.html">List of all member functions.</a> +<h2>Public Members</h2> +<ul> +<li><div class="fn"><a href="#39107d"><b>QLabel</b></a>(QWidget*parent, constchar*name=0, WFlagsf=0)</div> +<li><div class="fn"><a href="#2bafbb"><b>QLabel</b></a>(constQString&text, QWidget*parent, constchar*name=0, WFlagsf=0)</div> +<li><div class="fn"><a href="#5514c7"><b>QLabel</b></a>(QWidget*buddy, constQString&, QWidget*parent, constchar*name=0, WFlagsf=0)</div> +<li><div class="fn"><a href="#9958af"><b>~QLabel</b></a>()</div> +<li><div class="fn">QString<a href="#72cf09"><b>text</b></a>()const</div> +<li><div class="fn">QPixmap*<a href="#101ecb"><b>pixmap</b></a>()const</div> +<li><div class="fn">QMovie*<a href="#7dcdfe"><b>movie</b></a>()const</div> +<li><div class="fn">TextFormat<a href="#0b92ed"><b>textFormat</b></a>()const</div> +<li><div class="fn">void<a href="#5de3f9"><b>setTextFormat</b></a>(TextFormat)</div> +<li><div class="fn">int<a href="#2fcaa3"><b>alignment</b></a>()const</div> +<li><div class="fn">virtualvoid<a href="#1f406e"><b>setAlignment</b></a>(int)</div> +<li><div class="fn">int<a href="#e3c907"><b>indent</b></a>()const</div> +<li><div class="fn">void<a href="#ed9b8b"><b>setIndent</b></a>(int)</div> +<li><div class="fn">boolautoResize()const<em>(obsolete)</em></div> +<li><div class="fn">virtualvoidsetAutoResize(bool)<em>(obsolete)</em></div> +<li><div class="fn">bool<a href="#7e1f73"><b>hasScaledContents</b></a>()const</div> +<li><div class="fn">void<a href="#e9e3cf"><b>setScaledContents</b></a>(bool)</div> +<li><div class="fn">virtualvoid<a href="#191701"><b>setBuddy</b></a>(QWidget*)</div> +<li><div class="fn">QWidget*<a href="#123954"><b>buddy</b></a>()const</div> +</ul> +<h2>Public Slots</h2> +<ul> +<li><div class="fn">virtualvoid<a href="#dffb43"><b>setText</b></a>(constQString&)</div> +<li><div class="fn">virtualvoid<a href="#f3f301"><b>setPixmap</b></a>(constQPixmap&)</div> +<li><div class="fn">virtualvoid<a href="#60de9f"><b>setMovie</b></a>(constQMovie&)</div> +<li><div class="fn">virtualvoid<a href="#301e3c"><b>setNum</b></a>(int)</div> +<li><div class="fn">virtualvoid<a href="#1a8f6a"><b>setNum</b></a>(double)</div> +<li><div class="fn">void<a href="#be73f3"><b>clear</b></a>()</div> +</ul> +<h2>Protected Members</h2> +<ul> +<li><div class="fn">virtualvoid<a href="#fac264"><b>drawContents</b></a>(QPainter*)</div> +<li><div class="fn">virtualvoid<a href="#479dd2"><b>drawContentsMask</b></a>(QPainter*)</div> +</ul> +<h2>Properties</h2> +<table border=1 cellpadding=3 cellspacing=0> +<tr><th>Type<th>Name<th>READ<th>WRITE<th>Options +<tr><td>QString<td>text<td>text<td>setText<td> +<tr><td>TextFormat<td>textFormat<td>textFormat<td>setTextFormat<td> +<tr><td>QPixmap<td>pixmap<td>pixmap<td>setPixmap<td> +<tr><td>bool<td>scaledContents<td>hasScaledContents<td>setScaledContents<td> +<tr><td>Alignment<td>alignment<td>alignment<td>setAlignment<td> +<tr><td>int<td>indent<td>indent<td>setIndent<td> +</table> +<p> +<hr><h2><a name="details"></a>Detailed Description</h2> +The QLabel widget provides a static information display +<p> +QLabel is used for displaying information in the form of text or +image to the user. No user interaction functionality is +provided. The visual appearance of the label can be configured in +various ways, and it can be used for specifying a focus accelerator +key for another widget. +<p>A QLabel can contain any of the following content types: +<ul> +<li> A plain text: set by passing a <a href="qstring.html">QString</a> to <a href="#dffb43">setText</a>(). +<li> A rich text: set by passing a QString that contains a rich text to setText(). +<li> A pixmap: set by passing a <a href="qpixmap.html">QPixmap</a> to <a href="#f3f301">setPixmap</a>(). +<li> A movie: set by passing a <a href="qmovie.html">QMovie</a> to <a href="#60de9f">setMovie</a>(). +<li> A number: set by passing an <em>int</em> or a <em>double</em> to <a href="#1a8f6a">setNum</a>(), which converts the number to plain text. +<li> Nothing: The same as an empty plain text. This is the default. Set by <a href="#be73f3">clear</a>(). +</ul> +<p>When the content is changed using any of these functions, any +previous content is cleared. +<p>The look of a QLabel can be tuned in several ways. All the settings +of <a href="qframe.html">QFrame</a> are available for specifying a widget frame. The +positioning of the content within the QLabel widget area can be +tuned with <a href="#1f406e">setAlignment</a>() and <a href="#ed9b8b">setIndent</a>(). For example, this code +sets up a sunken panel with a two-line text in the bottom right +corner (both lines being flush with the right side of the label): +<p><pre> <a href="qlabel.html">QLabel</a> *label = new <a href="qlabel.html">QLabel</a>; + label-><a href="qframe.html#c0d758">setFrameStyle</a>( QFrame::Panel | QFrame::Sunken ); + label-><a href="#dffb43">setText</a>( "first line\nsecond line" ); + label-><a href="#1f406e">setAlignment</a>( AlignBottom | AlignRight ); +</pre> +<p>A QLabel is often used as a label for another, interactive +widget. For this use, QLabel provides a handy mechanism for adding +an accelerator key (see <a href="qaccel.html">QAccel</a>) that will set the keyboard focus to +the other widget (called the QLabel's "buddy"). Example: +<p><pre> <a href="qlineedit.html">QLineEdit</a>* phoneEdit = new <a href="qlineedit.html">QLineEdit</a>( this, "phoneEdit" ); + <a href="qlabel.html">QLabel</a>* phoneLabel = new <a href="qlabel.html">QLabel</a>( phoneEdit, "&Phone:", this, "phoneLabel" ); +</pre> +<p>In this example, keyboard focus is transferred to the label's buddy +(the <a href="qlineedit.html">QLineEdit</a>) when the user presses <dfn>Alt-P.</dfn> You can also +use the <a href="#191701">setBuddy</a>() function to accomplish the same. +<p> +<p>See also <a href="qlineedit.html">QLineEdit</a>, <a href="qtextview.html">QTextView</a>, <a href="qpixmap.html">QPixmap</a>, <a href="qmovie.html">QMovie</a> and <a href="guibooks.html#fowler">GUI Design Handbook: Label</a> +<p>Examples: + <a href="cursor-cursor-cpp.html#QLabel">cursor/cursor.cpp</a> + <a href="layout-layout-cpp.html#QLabel">layout/layout.cpp</a> + <a href="popup-popup-cpp.html#QLabel">popup/popup.cpp</a> + <a href="menu-menu-cpp.html#QLabel">menu/menu.cpp</a> + <a href="progress-progress-cpp.html#QLabel">progress/progress.cpp</a> + <a href="qmag-qmag-cpp.html#QLabel">qmag/qmag.cpp</a> + <a href="movies-main-cpp.html#QLabel">movies/main.cpp</a> + <a href="customlayout-main-cpp.html#QLabel">customlayout/main.cpp</a> + +<hr><h2>Member Function Documentation</h2> +<h3 class="fn"><a name="5514c7"></a>QLabel::QLabel(<a href="qwidget.html">QWidget</a>*buddy, const<a href="qstring.html">QString</a>&text, <a href="qwidget.html">QWidget</a>*parent, constchar*name=0, WFlagsf=0)</h3> +<p>Constructs a label with a text and a buddy. +<p>The <em>text</em> is set with <a href="#dffb43">setText</a>(). The <em>buddy</em> is set with <a href="#191701">setBuddy</a>(). +<p>The <em>parent, name</em> and <em>f</em> arguments are passed to the <a href="qframe.html">QFrame</a> +constructor. +<p>See also <a href="#dffb43">setText</a>(), <a href="#191701">setBuddy</a>(), <a href="#1f406e">setAlignment</a>(), <a href="qframe.html#c0d758">setFrameStyle</a>() and <a href="#ed9b8b">setIndent</a>(). +<h3 class="fn"><a name="39107d"></a>QLabel::QLabel(<a href="qwidget.html">QWidget</a>*parent, constchar*name=0, WFlagsf=0)</h3> +<p>Constructs an empty label. +<p>The <em>parent, name</em> and <em>f</em> arguments are passed to the <a href="qframe.html">QFrame</a> +constructor. +<p>See also <a href="#1f406e">setAlignment</a>(), <a href="qframe.html#c0d758">setFrameStyle</a>() and <a href="#ed9b8b">setIndent</a>(). +<h3 class="fn"><a name="2bafbb"></a>QLabel::QLabel(const<a href="qstring.html">QString</a>&text, <a href="qwidget.html">QWidget</a>*parent, constchar*name=0, WFlagsf=0)</h3> +<p>Constructs a label with a text. The <em>text</em> is set with <a href="#dffb43">setText</a>(). +<p>The <em>parent, name</em> and <em>f</em> arguments are passed to the <a href="qframe.html">QFrame</a> +constructor. +<p>See also <a href="#dffb43">setText</a>(), <a href="#1f406e">setAlignment</a>(), <a href="qframe.html#c0d758">setFrameStyle</a>() and <a href="#ed9b8b">setIndent</a>(). +<h3 class="fn"><a name="9958af"></a>QLabel::~QLabel()</h3> +<p>Destructs the label. +<h3 class="fn">int<a name="2fcaa3"></a>QLabel::alignment()const</h3> +<p>Returns the alignment setting. +<p>See also <a href="#1f406e">setAlignment</a>(). +<h3 class="fn">bool<a name="75b2a1"></a>QLabel::autoResize()const</h3> +<p><b>This function is obsolete.</b> It is provided to keep old source working, and will probably be removed in a future version of Qt. We strongly advise against using it in new code.<p> +<p>Returns TRUE if auto-resizing is enabled, or FALSE if auto-resizing +is disabled. +<p>Auto-resizing is disabled by default. +<p>See also <a href="#c0e104">setAutoResize</a>(). +<h3 class="fn"><a href="qwidget.html">QWidget</a>*<a name="123954"></a>QLabel::buddy()const</h3> +<p>Returns the buddy of this label, or 0 if no buddy is currently set. +<p>See also <a href="#191701">setBuddy</a>(). +<h3 class="fn">void<a name="be73f3"></a>QLabel::clear() <code>[slot]</code></h3> +<p>Clears any label contents. Equivalent with <a href="#dffb43">setText</a>( "" ). +<h3 class="fn">void<a name="fac264"></a>QLabel::drawContents(<a href="qpainter.html">QPainter</a>*p) <code>[virtualprotected]</code></h3> +<p>Draws the label contents using the painter <em>p.</em> +<p>Reimplemented from <a href="qframe.html#99e687">QFrame.</a> +<h3 class="fn">void<a name="479dd2"></a>QLabel::drawContentsMask(<a href="qpainter.html">QPainter</a>*p) <code>[virtualprotected]</code></h3> +<p>Draws the label contents mask using the painter <em>p.</em> +Used only in transparent mode. +<p>See also <a href="qwidget.html#c7a335">QWidget::setAutoMask</a>();. +<p>Reimplemented from <a href="qframe.html#4cbf11">QFrame.</a> +<h3 class="fn">void<a name="0435a2"></a>QLabel::fontChange(const<a href="qfont.html">QFont</a>&) <code>[virtualprotected]</code></h3> +<p>Reimplemented for internal reasons; the API is not affected. +<p>Reimplemented from <a href="qwidget.html#570a8f">QWidget.</a> +<h3 class="fn">bool<a name="7e1f73"></a>QLabel::hasScaledContents()const</h3> +<p>Returns whether the label will scale its contents to fill all +available space. +<p>See also <a href="#e9e3cf">setScaledContents</a>(). +<h3 class="fn">int<a name="dae451"></a>QLabel::heightForWidth(intw)const <code>[virtual]</code></h3> +<p>Reimplemented for internal reasons; the API is not affected. +<p>Reimplemented from <a href="qwidget.html#2e8476">QWidget.</a> +<h3 class="fn">int<a name="e3c907"></a>QLabel::indent()const</h3> +<p>Returns the indent of the label. +<p>See also <a href="#ed9b8b">setIndent</a>(). +<h3 class="fn"><a href="qsize.html">QSize</a><a name="53c8c7"></a>QLabel::minimumSizeHint()const <code>[virtual]</code></h3> +<p>Reimplemented for internal reasons; the API is not affected. +<p>Reimplemented from <a href="qwidget.html#3f0fc2">QWidget.</a> +<h3 class="fn"><a href="qmovie.html">QMovie</a>*<a name="7dcdfe"></a>QLabel::movie()const</h3> +<p>If the label contains a movie, returns a pointer to it. Otherwise, +returns 0. +<p>See also <a href="#60de9f">setMovie</a>(). +<h3 class="fn"><a href="qpixmap.html">QPixmap</a>*<a name="101ecb"></a>QLabel::pixmap()const</h3> +<p>If the label contains a pixmap, returns a pointer to it. Otherwise, +returns 0. +<p>See also <a href="#f3f301">setPixmap</a>(). +<h3 class="fn">void<a name="3cb6e7"></a>QLabel::resizeEvent(<a href="qresizeevent.html">QResizeEvent</a>*e) <code>[virtualprotected]</code></h3> +<p>Reimplemented for internal reasons; the API is not affected. +<p>Reimplemented from <a href="qwidget.html#28c156">QWidget.</a> +<h3 class="fn">void<a name="1f406e"></a>QLabel::setAlignment(intalignment) <code>[virtual]</code></h3> +<p>Sets the alignment of the label contents. +<p>The <em>alignment</em> must be a bitwise OR of <a href="qt.html#AlignmentFlags">Qt::AlignmentFlags</a> +values. The <code>WordBreak, ExpandTabs, SingleLine</code> and <code>ShowPrefix</code> flags apply only if the label contains a plain text, and +are otherwise ignored. The <code>DontClip</code> flag is always ignored. +<p>If the label has a buddy, the <code>ShowPrefix</code> flag is forced to TRUE. +<p>The default alignment is <code>AlignLeft | AlignVCenter | +ExpandTabs</code> if the label doesn't have a buddy and +<code>AlignLeft | AlignVCenter | ExpandTabs | ShowPrefix </code> if +the label has a buddy. +<p>See also <a href="qt.html#AlignmentFlags">Qt::AlignmentFlags</a>, <a href="#2fcaa3">alignment</a>(), <a href="#191701">setBuddy</a>() and <a href="#dffb43">setText</a>(). +<p>Examples: + <a href="cursor-cursor-cpp.html#setAlignment">cursor/cursor.cpp</a> + <a href="layout-layout-cpp.html#setAlignment">layout/layout.cpp</a> + <a href="popup-popup-cpp.html#setAlignment">popup/popup.cpp</a> + <a href="qmag-qmag-cpp.html#setAlignment">qmag/qmag.cpp</a> + <a href="customlayout-main-cpp.html#setAlignment">customlayout/main.cpp</a> +<h3 class="fn">void<a name="1b6d73"></a>QLabel::setAutoMask(boolb) <code>[virtual]</code></h3> +<p>Reimplemented for internal reasons; the API is not affected. +<p>Reimplemented from <a href="qwidget.html#c7a335">QWidget.</a> +<h3 class="fn">void<a name="c0e104"></a>QLabel::setAutoResize(boolenable) <code>[virtual]</code></h3> +<p><b>This function is obsolete.</b> It is provided to keep old source working, and will probably be removed in a future version of Qt. We strongly advise against using it in new code.<p> +Enables auto-resizing if <em>enable</em> is TRUE, or disables it if <em>enable</em> is FALSE. +<p>When auto-resizing is enabled, the label will resize itself to fit +the contents whenever the contents change. The top left corner is +not moved. This is useful for QLabel widgets that are not managed by +a <a href="qlayout.html">QLayout</a> (e.g. top-level widgets). +<p>Auto-resizing is disabled by default. +<p>See also <a href="#75b2a1">autoResize</a>(), <a href="qwidget.html#ab3108">adjustSize</a>() and <a href="#614dd5">sizeHint</a>(). +<h3 class="fn">void<a name="191701"></a>QLabel::setBuddy(<a href="qwidget.html">QWidget</a>*buddy) <code>[virtual]</code></h3> +<p>Sets the buddy of this label to <em>buddy.</em> +<p>When the user presses the accelerator key indicated by this label, +the keyboard focus is transferred to the label's buddy widget. +<p>The buddy mechanism is only available for QLabels that contain a +plain text in which one letter is prefixed with '&'. It is this +letter that is set as the accelerator key. The letter is displayed +underlined, and the '&' is not displayed (i.e. the <code>ShowPrefix</code> +alignment flag is turned on; see <a href="#1f406e">setAlignment</a>()). +<p>In a dialog, you might create two data entry widgets and a label for +each, and set up the geometry layout so each label is just to the +left of its data entry widget (its "buddy"), somewhat like this: +<p><pre> <a href="qlineedit.html">QLineEdit</a> *nameEd = new <a href="qlineedit.html">QLineEdit</a>( this ); + <a href="qlabel.html">QLabel</a> *nameLb = new <a href="qlabel.html">QLabel</a>( "&Name:", this ); + nameLb-><a href="#191701">setBuddy</a>( nameEd ); + <a href="qlineedit.html">QLineEdit</a> *phoneEd = new <a href="qlineedit.html">QLineEdit</a>( this ); + <a href="qlabel.html">QLabel</a> *phoneLb = new <a href="qlabel.html">QLabel</a>( "&Phone:", this ); + phoneLb-><a href="#191701">setBuddy</a>( phoneEd ); + // ( layout setup not shown ) +</pre> +<p>With the code above, the focus jumps to the Name field when the user +presses Alt-N, and to the Phone field when the user presses Alt-P. +<p>To unset a previously set buddy, call this function with <em>buddy</em> +set to 0. +<p>See also <a href="#123954">buddy</a>(), <a href="#dffb43">setText</a>(), <a href="qaccel.html">QAccel</a> and <a href="#1f406e">setAlignment</a>(). +<p>Examples: + <a href="layout-layout-cpp.html#setBuddy">layout/layout.cpp</a> +<h3 class="fn">void<a name="ed9b8b"></a>QLabel::setIndent(intindent)</h3> +<p>Sets the indent of the label to <em>indent</em> pixels. +<p>The indent applies to the left edge if <a href="#2fcaa3">alignment</a>() is <code>AlignLeft,</code> +to the right edge if alignment() is <code>AlignRight,</code> to the top edge +if alignment() is <code>AlignTop,</code> and to to the bottom edge if +alignment() is <code>AlignBottom.</code> +<p>If <em>indent</em> is negative, or if no indent has been set, the label +computes the effective indent as follows: If <a href="qframe.html#e0ccef">frameWidth</a>() is 0, the +effective indent becomes 0. If frameWidth() is greater than 0, the +effective indent becomes half the width of the "x" character of the +widget's current <a href="qwidget.html#3a7237">font</a>(). +<p>If <em>indent</em> is non-negative, the effective indent is <em>indent</em> +pixels. +<p>See also <a href="#e3c907">indent</a>(), <a href="#1f406e">setAlignment</a>(), <a href="qframe.html#e0ccef">frameWidth</a>() and <a href="qwidget.html#3a7237">font</a>(). +<p>Examples: + <a href="movies-main-cpp.html#setIndent">movies/main.cpp</a> +<h3 class="fn">void<a name="60de9f"></a>QLabel::setMovie(const<a href="qmovie.html">QMovie</a>&movie) <code>[virtualslot]</code></h3> +<p>Sets the label contents to <em>movie.</em> Any previous content is cleared. +<p>The buddy accelerator, if any, is disabled. +<p>The label resizes itself if auto-resizing is enabled. +<p>See also <a href="#7dcdfe">movie</a>() and <a href="#191701">setBuddy</a>(). +<h3 class="fn">void<a name="1a8f6a"></a>QLabel::setNum(doublenum) <code>[virtualslot]</code></h3> +<p>Sets the label contents to a plain text containing the printed value +of <em>num.</em> Does nothing if this is equal to the current contents of +the label. Any previous content is cleared. +<p>The buddy accelerator, if any, is disabled. +<p>The label resizes itself if auto-resizing is enabled. +<p>See also <a href="#dffb43">setText</a>(), <a href="qstring.html#01d80b">QString::setNum</a>() and <a href="#191701">setBuddy</a>(). +<h3 class="fn">void<a name="301e3c"></a>QLabel::setNum(intnum) <code>[virtualslot]</code></h3> +<p>Sets the label contents to a plain text containing the printed value +of <em>num.</em> Does nothing if this is equal to the current contents of +the label. Any previous content is cleared. +<p>The buddy accelerator, if any, is disabled. +<p>The label resizes itself if auto-resizing is enabled. +<p>See also <a href="#dffb43">setText</a>(), <a href="qstring.html#01d80b">QString::setNum</a>() and <a href="#191701">setBuddy</a>(). +<h3 class="fn">void<a name="f3f301"></a>QLabel::setPixmap(const<a href="qpixmap.html">QPixmap</a>&pixmap) <code>[virtualslot]</code></h3> +<p>Sets the label contents to <em>pixmap.</em> Any previous content is cleared. +<p>The buddy accelerator, if any, is disabled. +<p>The label resizes itself if auto-resizing is enabled. +<p>See also <a href="#101ecb">pixmap</a>() and <a href="#191701">setBuddy</a>(). +<h3 class="fn">void<a name="e9e3cf"></a>QLabel::setScaledContents(boolenable)</h3> +<p>When called with <em>enable</em> == TRUE, and the label shows a pixmap, +it will scale the pixmap to fill available space. +<p>See also <a href="#7e1f73">hasScaledContents</a>(). +<h3 class="fn">void<a name="dffb43"></a>QLabel::setText(const<a href="qstring.html">QString</a>&text) <code>[virtualslot]</code></h3> +<p>Sets the label contents to <em>text,</em> or does nothing if <em>text</em> is +equal to the current contents of the label. Any previous content is +cleared. +<p><em>text</em> will be interpreted either as a plain text or as a rich +text, depending on the text format setting; see <a href="#5de3f9">setTextFormat</a>(). The +default setting is <code>AutoText,</code> i.e. QLabel will try to auto-detect +the format of <em>text.</em> +<p>If <em>text</em> is interpreted as a plain text, and a buddy has been set, +the buddy accelerator key is updated from the new text. +<p>The label resizes itself if auto-resizing is enabled. +<p>Note that Qlabel is well suited to display small rich text documents +only. For large documents, use <a href="qtextview.html">QTextView</a> instead. It will flicker +less on resize and can also provide a scrollbar if necessary. +<p>See also <a href="#72cf09">text</a>(), <a href="#5de3f9">setTextFormat</a>(), <a href="#191701">setBuddy</a>() and <a href="#1f406e">setAlignment</a>(). +<p>Examples: + <a href="cursor-cursor-cpp.html#setText">cursor/cursor.cpp</a> + <a href="layout-layout-cpp.html#setText">layout/layout.cpp</a> + <a href="popup-popup-cpp.html#setText">popup/popup.cpp</a> + <a href="qmag-qmag-cpp.html#setText">qmag/qmag.cpp</a> + <a href="customlayout-main-cpp.html#setText">customlayout/main.cpp</a> +<h3 class="fn">void<a name="5de3f9"></a>QLabel::setTextFormat(<a href="qt.html#TextFormat">Qt::TextFormat</a>format)</h3> +<p>Sets the text format to <em>format.</em> See the <a href="qt.html#TextFormat">Qt::TextFormat</a> enum for +an explanation of the possible options. +<p>The default format is <code>AutoText.</code> +<p>See also <a href="#0b92ed">textFormat</a>() and <a href="#dffb43">setText</a>(). +<h3 class="fn"><a href="qsize.html">QSize</a><a name="614dd5"></a>QLabel::sizeHint()const <code>[virtual]</code></h3> +<p>Reimplemented for internal reasons; the API is not affected. +<p>Examples: + <a href="layout-layout-cpp.html#sizeHint">layout/layout.cpp</a> +<p>Reimplemented from <a href="qwidget.html#290bcd">QWidget.</a> +<h3 class="fn"><a href="qsizepolicy.html">QSizePolicy</a><a name="26e1d9"></a>QLabel::sizePolicy()const <code>[virtual]</code></h3> +<p>Reimplemented for internal reasons; the API is not affected. +<p>Reimplemented from <a href="qwidget.html#2d5d13">QWidget.</a> +<h3 class="fn"><a href="qstring.html">QString</a><a name="72cf09"></a>QLabel::text()const</h3> +<p>Returns the label text. If the content is a plain or a rich text, +this is the string that was passed to <a href="#dffb43">setText</a>(). Otherwise, it is an +empty/null string. +<p>See also <a href="#dffb43">setText</a>(), <a href="#1a8f6a">setNum</a>() and <a href="#be73f3">clear</a>(). +<h3 class="fn">Qt::TextFormat<a name="0b92ed"></a>QLabel::textFormat()const</h3> +<p>Returns the current text format. +<p>See also <a href="#5de3f9">setTextFormat</a>(). +<hr><p> +Search the documentation, FAQ, qt-interest archive and more (uses +<a href="http://www.trolltech.com">www.trolltech.com</a>):<br> +<form method=post action="http://www.trolltech.com/search.cgi"> +<input type=hidden name="version" value="3.0.0-snapshot"><nobr> +<input size="50" name="search"><input type=submit value="Search"> +</nobr></form><hr><p> +This file is part of the <a href="index.html">Qt toolkit</a>, +copyright © 1995-2006 +<a href="http://www.trolltech.com">Trolltech</a>, all rights reserved.<p><address><hr><div align="center"> +<table width="100%" cellspacing="0" border="0"><tr> +<td>Copyright 2006 Trolltech<td><a href="http://www.trolltech.com/trademarks.html">Trademarks</a> +<td align="right"><div align="right">Qt version 3.0.0-snapshot</div> +</table></div></address></body></html> diff --git a/examples/demo/textdrawing/filenew.png b/examples/demo/textdrawing/filenew.png Binary files differnew file mode 100644 index 0000000..be963bf --- /dev/null +++ b/examples/demo/textdrawing/filenew.png diff --git a/examples/demo/textdrawing/fileopen.png b/examples/demo/textdrawing/fileopen.png Binary files differnew file mode 100644 index 0000000..6077b81 --- /dev/null +++ b/examples/demo/textdrawing/fileopen.png diff --git a/examples/demo/textdrawing/filesave.png b/examples/demo/textdrawing/filesave.png Binary files differnew file mode 100644 index 0000000..a1cb03d --- /dev/null +++ b/examples/demo/textdrawing/filesave.png diff --git a/examples/demo/textdrawing/help.png b/examples/demo/textdrawing/help.png Binary files differnew file mode 100644 index 0000000..2ab2c25 --- /dev/null +++ b/examples/demo/textdrawing/help.png diff --git a/examples/demo/textdrawing/helpwindow.cpp b/examples/demo/textdrawing/helpwindow.cpp new file mode 100644 index 0000000..9fa0e7b --- /dev/null +++ b/examples/demo/textdrawing/helpwindow.cpp @@ -0,0 +1,337 @@ +/**************************************************************************** +** +** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved. +** +** This file is part of an example program for Qt. This example +** program may be used, distributed and modified without limitation. +** +*****************************************************************************/ + +#include "helpwindow.h" +#include <qstatusbar.h> +#include <qpixmap.h> +#include <qpopupmenu.h> +#include <qmenubar.h> +#include <qtoolbar.h> +#include <qtoolbutton.h> +#include <qiconset.h> +#include <qfile.h> +#include <qtextstream.h> +#include <qstylesheet.h> +#include <qmessagebox.h> +#include <qfiledialog.h> +#include <qapplication.h> +#include <qcombobox.h> +#include <qevent.h> +#include <qlineedit.h> +#include <qobjectlist.h> +#include <qfileinfo.h> +#include <qfile.h> +#include <qdatastream.h> +#include <qprinter.h> +#include <qsimplerichtext.h> +#include <qpainter.h> +#include <qpaintdevicemetrics.h> + +#include <ctype.h> + +HelpWindow::HelpWindow( const QString& home_, const QString& _path, + QWidget* parent, const char *name ) + : QMainWindow( parent, name, WDestructiveClose ), + pathCombo( 0 ), selectedURL() +{ + readHistory(); + readBookmarks(); + + browser = new QTextBrowser( this ); + browser->mimeSourceFactory()->setFilePath( _path ); + browser->setFrameStyle( QFrame::Panel | QFrame::Sunken ); + connect( browser, SIGNAL( textChanged() ), + this, SLOT( textChanged() ) ); + + setCentralWidget( browser ); + + if ( !home_.isEmpty() ) + browser->setSource( home_ ); + + connect( browser, SIGNAL( highlighted( const QString&) ), + statusBar(), SLOT( message( const QString&)) ); + + resize( 640,700 ); + + QPopupMenu* file = new QPopupMenu( this ); + file->insertItem( tr("&New Window"), this, SLOT( newWindow() ), ALT | Key_N ); + file->insertItem( tr("&Open File"), this, SLOT( openFile() ), ALT | Key_O ); + file->insertItem( tr("&Print"), this, SLOT( print() ), ALT | Key_P ); + + // The same three icons are used twice each. + QIconSet icon_back( QPixmap("textdrawing/previous.png") ); + QIconSet icon_forward( QPixmap("textdrawing/next.png") ); + QIconSet icon_home( QPixmap("textdrawing/home.png") ); + + QPopupMenu* go = new QPopupMenu( this ); + backwardId = go->insertItem( icon_back, + tr("&Backward"), browser, SLOT( backward() ), + ALT | Key_Left ); + forwardId = go->insertItem( icon_forward, + tr("&Forward"), browser, SLOT( forward() ), + ALT | Key_Right ); + go->insertItem( icon_home, tr("&Home"), browser, SLOT( home() ) ); + + hist = new QPopupMenu( this ); + QStringList::Iterator it = history.begin(); + for ( ; it != history.end(); ++it ) + mHistory[ hist->insertItem( *it ) ] = *it; + connect( hist, SIGNAL( activated( int ) ), + this, SLOT( histChosen( int ) ) ); + + bookm = new QPopupMenu( this ); + bookm->insertItem( tr( "Add Bookmark" ), this, SLOT( addBookmark() ) ); + bookm->insertSeparator(); + + QStringList::Iterator it2 = bookmarks.begin(); + for ( ; it2 != bookmarks.end(); ++it2 ) + mBookmarks[ bookm->insertItem( *it2 ) ] = *it2; + connect( bookm, SIGNAL( activated( int ) ), + this, SLOT( bookmChosen( int ) ) ); + + menuBar()->insertItem( tr("&File"), file ); + menuBar()->insertItem( tr("&Go"), go ); + menuBar()->insertItem( tr( "History" ), hist ); + menuBar()->insertItem( tr( "Bookmarks" ), bookm ); + + menuBar()->setItemEnabled( forwardId, FALSE); + menuBar()->setItemEnabled( backwardId, FALSE); + connect( browser, SIGNAL( backwardAvailable( bool ) ), + this, SLOT( setBackwardAvailable( bool ) ) ); + connect( browser, SIGNAL( forwardAvailable( bool ) ), + this, SLOT( setForwardAvailable( bool ) ) ); + + + QToolBar* toolbar = new QToolBar( this ); + addToolBar( toolbar, "Toolbar"); + QToolButton* button; + + button = new QToolButton( icon_back, tr("Backward"), "", browser, SLOT(backward()), toolbar ); + connect( browser, SIGNAL( backwardAvailable(bool) ), button, SLOT( setEnabled(bool) ) ); + button->setEnabled( FALSE ); + button = new QToolButton( icon_forward, tr("Forward"), "", browser, SLOT(forward()), toolbar ); + connect( browser, SIGNAL( forwardAvailable(bool) ), button, SLOT( setEnabled(bool) ) ); + button->setEnabled( FALSE ); + button = new QToolButton( icon_home, tr("Home"), "", browser, SLOT(home()), toolbar ); + + toolbar->addSeparator(); + + pathCombo = new QComboBox( TRUE, toolbar ); + connect( pathCombo, SIGNAL( activated( const QString & ) ), + this, SLOT( pathSelected( const QString & ) ) ); + toolbar->setStretchableWidget( pathCombo ); + setRightJustification( TRUE ); + setDockEnabled( DockLeft, FALSE ); + setDockEnabled( DockRight, FALSE ); + + pathCombo->insertItem( home_ ); + + browser->setFocus(); +} + + +void HelpWindow::setBackwardAvailable( bool b) +{ + menuBar()->setItemEnabled( backwardId, b); +} + +void HelpWindow::setForwardAvailable( bool b) +{ + menuBar()->setItemEnabled( forwardId, b); +} + + +void HelpWindow::textChanged() +{ + if ( browser->documentTitle().isNull() ) + setCaption( browser->context() ); + else + setCaption( browser->documentTitle() ) ; + + selectedURL = caption(); + if ( !selectedURL.isEmpty() && pathCombo ) { + bool exists = FALSE; + int i; + for ( i = 0; i < pathCombo->count(); ++i ) { + if ( pathCombo->text( i ) == selectedURL ) { + exists = TRUE; + break; + } + } + if ( !exists ) { + pathCombo->insertItem( selectedURL, 0 ); + pathCombo->setCurrentItem( 0 ); + mHistory[ hist->insertItem( selectedURL ) ] = selectedURL; + } else + pathCombo->setCurrentItem( i ); + selectedURL = QString::null; + } +} + +HelpWindow::~HelpWindow() +{ + history.clear(); + QMap<int, QString>::Iterator it = mHistory.begin(); + for ( ; it != mHistory.end(); ++it ) + history.append( *it ); + + QFile f( QDir::currentDirPath() + "/.history" ); + f.open( IO_WriteOnly ); + QDataStream s( &f ); + s << history; + f.close(); + + bookmarks.clear(); + QMap<int, QString>::Iterator it2 = mBookmarks.begin(); + for ( ; it2 != mBookmarks.end(); ++it2 ) + bookmarks.append( *it2 ); + + QFile f2( QDir::currentDirPath() + "/.bookmarks" ); + f2.open( IO_WriteOnly ); + QDataStream s2( &f2 ); + s2 << bookmarks; + f2.close(); +} + +void HelpWindow::about() +{ + QMessageBox::about( this, "HelpViewer Example", + "<p>This example implements a simple HTML help viewer " + "using Qt's rich text capabilities</p>" + "<p>It's just about 100 lines of C++ code, so don't expect too much :-)</p>" + ); +} + + +void HelpWindow::aboutQt() +{ + QMessageBox::aboutQt( this, "QBrowser" ); +} + +void HelpWindow::openFile() +{ +#ifndef QT_NO_FILEDIALOG + QString fn = QFileDialog::getOpenFileName( QString::null, QString::null, this ); + if ( !fn.isEmpty() ) + browser->setSource( fn ); +#endif +} + +void HelpWindow::newWindow() +{ + ( new HelpWindow(browser->source(), "qbrowser") )->show(); +} + +void HelpWindow::print() +{ +#ifndef QT_NO_PRINTER + QPrinter printer; + printer.setFullPage(TRUE); + if ( printer.setup() ) { + QPainter p( &printer ); + QPaintDeviceMetrics metrics(p.device()); + int dpix = metrics.logicalDpiX(); + int dpiy = metrics.logicalDpiY(); + const int margin = 72; // pt + QRect body(margin*dpix/72, margin*dpiy/72, + metrics.width()-margin*dpix/72*2, + metrics.height()-margin*dpiy/72*2 ); + QFont font("times", 10); + QStringList filePaths = browser->mimeSourceFactory()->filePath(); + QString file; + QStringList::Iterator it = filePaths.begin(); + for ( ; it != filePaths.end(); ++it ) { + file = QUrl( *it, QUrl( browser->source() ).path() ).path(); + if ( QFile::exists( file ) ) + break; + else + file = QString::null; + } + if ( file.isEmpty() ) + return; + QFile f( file ); + if ( !f.open( IO_ReadOnly ) ) + return; + QTextStream ts( &f ); + QSimpleRichText richText( ts.read(), font, browser->context(), browser->styleSheet(), + browser->mimeSourceFactory(), body.height() ); + richText.setWidth( &p, body.width() ); + QRect view( body ); + int page = 1; + do { + richText.draw( &p, body.left(), body.top(), view, colorGroup() ); + view.moveBy( 0, body.height() ); + p.translate( 0 , -body.height() ); + p.setFont( font ); + p.drawText( view.right() - p.fontMetrics().width( QString::number(page) ), + view.bottom() + p.fontMetrics().ascent() + 5, QString::number(page) ); + if ( view.top() >= richText.height() ) + break; + printer.newPage(); + page++; + } while (TRUE); + } +#endif +} + +void HelpWindow::pathSelected( const QString &_path ) +{ + browser->setSource( _path ); + QMap<int, QString>::Iterator it = mHistory.begin(); + bool exists = FALSE; + for ( ; it != mHistory.end(); ++it ) { + if ( *it == _path ) { + exists = TRUE; + break; + } + } + if ( !exists ) + mHistory[ hist->insertItem( _path ) ] = _path; +} + +void HelpWindow::readHistory() +{ + if ( QFile::exists( QDir::currentDirPath() + "/.history" ) ) { + QFile f( QDir::currentDirPath() + "/.history" ); + f.open( IO_ReadOnly ); + QDataStream s( &f ); + s >> history; + f.close(); + while ( history.count() > 20 ) + history.remove( history.begin() ); + } +} + +void HelpWindow::readBookmarks() +{ + if ( QFile::exists( QDir::currentDirPath() + "/.bookmarks" ) ) { + QFile f( QDir::currentDirPath() + "/.bookmarks" ); + f.open( IO_ReadOnly ); + QDataStream s( &f ); + s >> bookmarks; + f.close(); + } +} + +void HelpWindow::histChosen( int i ) +{ + if ( mHistory.contains( i ) ) + browser->setSource( mHistory[ i ] ); +} + +void HelpWindow::bookmChosen( int i ) +{ + if ( mBookmarks.contains( i ) ) + browser->setSource( mBookmarks[ i ] ); +} + +void HelpWindow::addBookmark() +{ + mBookmarks[ bookm->insertItem( caption() ) ] = caption(); +} diff --git a/examples/demo/textdrawing/helpwindow.h b/examples/demo/textdrawing/helpwindow.h new file mode 100644 index 0000000..3427ad9 --- /dev/null +++ b/examples/demo/textdrawing/helpwindow.h @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved. +** +** This file is part of an example program for Qt. This example +** program may be used, distributed and modified without limitation. +** +*****************************************************************************/ + +#ifndef HELPWINDOW_H +#define HELPWINDOW_H + +#include <qmainwindow.h> +#include <qtextbrowser.h> +#include <qstringlist.h> +#include <qmap.h> +#include <qdir.h> + +class QComboBox; +class QPopupMenu; + +class HelpWindow : public QMainWindow +{ + Q_OBJECT +public: + HelpWindow( const QString& home_, const QString& path, QWidget* parent = 0, const char *name=0 ); + ~HelpWindow(); + +private slots: + void setBackwardAvailable( bool ); + void setForwardAvailable( bool ); + + void textChanged(); + void about(); + void aboutQt(); + void openFile(); + void newWindow(); + void print(); + + void pathSelected( const QString & ); + void histChosen( int ); + void bookmChosen( int ); + void addBookmark(); + +private: + void readHistory(); + void readBookmarks(); + + QTextBrowser* browser; + QComboBox *pathCombo; + int backwardId, forwardId; + QString selectedURL; + QStringList history, bookmarks; + QMap<int, QString> mHistory, mBookmarks; + QPopupMenu *hist, *bookm; + +}; + + + + + +#endif + diff --git a/examples/demo/textdrawing/home.png b/examples/demo/textdrawing/home.png Binary files differnew file mode 100644 index 0000000..aa150a3 --- /dev/null +++ b/examples/demo/textdrawing/home.png diff --git a/examples/demo/textdrawing/next.png b/examples/demo/textdrawing/next.png Binary files differnew file mode 100644 index 0000000..4b29ff4 --- /dev/null +++ b/examples/demo/textdrawing/next.png diff --git a/examples/demo/textdrawing/previous.png b/examples/demo/textdrawing/previous.png Binary files differnew file mode 100644 index 0000000..4e3556c --- /dev/null +++ b/examples/demo/textdrawing/previous.png diff --git a/examples/demo/textdrawing/print.png b/examples/demo/textdrawing/print.png Binary files differnew file mode 100644 index 0000000..57e3e53 --- /dev/null +++ b/examples/demo/textdrawing/print.png diff --git a/examples/demo/textdrawing/redo.png b/examples/demo/textdrawing/redo.png Binary files differnew file mode 100644 index 0000000..bae07d3 --- /dev/null +++ b/examples/demo/textdrawing/redo.png diff --git a/examples/demo/textdrawing/textbold.png b/examples/demo/textdrawing/textbold.png Binary files differnew file mode 100644 index 0000000..7b5be47 --- /dev/null +++ b/examples/demo/textdrawing/textbold.png diff --git a/examples/demo/textdrawing/textcenter.png b/examples/demo/textdrawing/textcenter.png Binary files differnew file mode 100644 index 0000000..5c68b09 --- /dev/null +++ b/examples/demo/textdrawing/textcenter.png diff --git a/examples/demo/textdrawing/textedit.cpp b/examples/demo/textdrawing/textedit.cpp new file mode 100644 index 0000000..9aebf54 --- /dev/null +++ b/examples/demo/textdrawing/textedit.cpp @@ -0,0 +1,477 @@ +/**************************************************************************** +** +** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved. +** +** This file is part of an example program for Qt. This example +** program may be used, distributed and modified without limitation. +** +*****************************************************************************/ + +#include "textedit.h" + +#include <qtextedit.h> +#include <qaction.h> +#include <qmenubar.h> +#include <qpopupmenu.h> +#include <qtoolbar.h> +#include <qtabwidget.h> +#include <qapplication.h> +#include <qfontdatabase.h> +#include <qcombobox.h> +#include <qlineedit.h> +#include <qfileinfo.h> +#include <qfile.h> +#include <qfiledialog.h> +#include <qprinter.h> +#include <qpaintdevicemetrics.h> +#include <qsimplerichtext.h> +#include <qcolordialog.h> +#include <qpainter.h> + +TextEdit::TextEdit( QWidget *parent, const char *name ) + : QMainWindow( parent, name, 0 ) +{ + setupFileActions(); + setupEditActions(); + setupTextActions(); + + tabWidget = new QTabWidget( this ); + connect( tabWidget, SIGNAL( currentChanged( QWidget * ) ), + this, SLOT( editorChanged( QWidget * ) ) ); + setCentralWidget( tabWidget ); +} + +void TextEdit::setupFileActions() +{ + QToolBar *tb = new QToolBar( this ); + QPopupMenu *menu = new QPopupMenu( this ); + menuBar()->insertItem( tr( "&File" ), menu ); + + QAction *a; + a = new QAction( tr( "New" ), QPixmap( "textdrawing/filenew.png" ), tr( "&New..." ), CTRL + Key_N, this, "fileNew" ); + connect( a, SIGNAL( activated() ), this, SLOT( fileNew() ) ); + a->addTo( tb ); + a->addTo( menu ); + a = new QAction( tr( "Open" ), QPixmap( "textdrawing/fileopen.png" ), tr( "&Open..." ), CTRL + Key_O, this, "fileOpen" ); + connect( a, SIGNAL( activated() ), this, SLOT( fileOpen() ) ); + a->addTo( tb ); + a->addTo( menu ); + menu->insertSeparator(); + a = new QAction( tr( "Save" ), QPixmap( "textdrawing/filesave.png" ), tr( "&Save..." ), CTRL + Key_S, this, "fileSave" ); + connect( a, SIGNAL( activated() ), this, SLOT( fileSave() ) ); + a->addTo( tb ); + a->addTo( menu ); + a = new QAction( tr( "Save As" ), QPixmap(), tr( "Save &As..." ), 0, this, "fileSaveAs" ); + connect( a, SIGNAL( activated() ), this, SLOT( fileSaveAs() ) ); + a->addTo( menu ); + menu->insertSeparator(); + a = new QAction( tr( "Print" ), QPixmap( "textdrawing/print.png" ), tr( "&Print..." ), CTRL + Key_P, this, "filePrint" ); + connect( a, SIGNAL( activated() ), this, SLOT( filePrint() ) ); + a->addTo( tb ); + a->addTo( menu ); + a = new QAction( tr( "Close" ), QPixmap(), tr( "&Close" ), 0, this, "fileClose" ); + connect( a, SIGNAL( activated() ), this, SLOT( fileClose() ) ); + a->addTo( menu ); +} + +void TextEdit::setupEditActions() +{ + QToolBar *tb = new QToolBar( this ); + QPopupMenu *menu = new QPopupMenu( this ); + menuBar()->insertItem( tr( "&Edit" ), menu ); + + QAction *a; + a = new QAction( tr( "Undo" ), QPixmap( "textdrawing/undo.png" ), tr( "&Undo" ), CTRL + Key_Z, this, "editUndo" ); + connect( a, SIGNAL( activated() ), this, SLOT( editUndo() ) ); + a->addTo( tb ); + a->addTo( menu ); + a = new QAction( tr( "Redo" ), QPixmap( "textdrawing/redo.png" ), tr( "&Redo" ), CTRL + Key_Y, this, "editRedo" ); + connect( a, SIGNAL( activated() ), this, SLOT( editRedo() ) ); + a->addTo( tb ); + a->addTo( menu ); + menu->insertSeparator(); + a = new QAction( tr( "Cut" ), QPixmap( "textdrawing/editcut.png" ), tr( "&Cut" ), CTRL + Key_X, this, "editCut" ); + connect( a, SIGNAL( activated() ), this, SLOT( editCut() ) ); + a->addTo( tb ); + a->addTo( menu ); + a = new QAction( tr( "Copy" ), QPixmap( "textdrawing/editcopy.png" ), tr( "C&opy" ), CTRL + Key_C, this, "editCopy" ); + connect( a, SIGNAL( activated() ), this, SLOT( editCopy() ) ); + a->addTo( tb ); + a->addTo( menu ); + a = new QAction( tr( "Paste" ), QPixmap( "textdrawing/editpaste.png" ), tr( "&Paste" ), CTRL + Key_V, this, "editPaste" ); + connect( a, SIGNAL( activated() ), this, SLOT( editPaste() ) ); + a->addTo( tb ); + a->addTo( menu ); +} + +void TextEdit::setupTextActions() +{ + QToolBar *tb = new QToolBar( this ); + QPopupMenu *menu = new QPopupMenu( this ); + menuBar()->insertItem( tr( "For&mat" ), menu ); + + comboStyle = new QComboBox( FALSE, tb ); + comboStyle->insertItem( tr("Standard") ); + comboStyle->insertItem( tr("Bullet List (Disc)") ); + comboStyle->insertItem( tr("Bullet List (Circle)") ); + comboStyle->insertItem( tr("Bullet List (Square)") ); + comboStyle->insertItem( tr("Ordered List (Decimal)") ); + comboStyle->insertItem( tr("Ordered List (Alpha lower)") ); + comboStyle->insertItem( tr("Ordered List (Alpha upper)") ); + connect( comboStyle, SIGNAL( activated( int ) ), + this, SLOT( textStyle( int ) ) ); + + comboFont = new QComboBox( TRUE, tb ); + QFontDatabase db; + comboFont->insertStringList( db.families() ); + connect( comboFont, SIGNAL( activated( const QString & ) ), + this, SLOT( textFamily( const QString & ) ) ); + comboFont->lineEdit()->setText( QApplication::font().family() ); + + comboSize = new QComboBox( TRUE, tb ); + QValueList<int> sizes = db.standardSizes(); + QValueList<int>::Iterator it = sizes.begin(); + for ( ; it != sizes.end(); ++it ) + comboSize->insertItem( QString::number( *it ) ); + connect( comboSize, SIGNAL( activated( const QString & ) ), + this, SLOT( textSize( const QString & ) ) ); + comboSize->lineEdit()->setText( QString::number( QApplication::font().pointSize() ) ); + + actionTextBold = new QAction( tr( "Bold" ), QPixmap( "textdrawing/textbold.png" ), tr( "&Bold" ), CTRL + Key_B, this, "textBold" ); + connect( actionTextBold, SIGNAL( activated() ), this, SLOT( textBold() ) ); + actionTextBold->addTo( tb ); + actionTextBold->addTo( menu ); + actionTextBold->setToggleAction( TRUE ); + actionTextItalic = new QAction( tr( "Italic" ), QPixmap( "textdrawing/textitalic.png" ), tr( "&Italic" ), CTRL + Key_I, this, "textItalic" ); + connect( actionTextItalic, SIGNAL( activated() ), this, SLOT( textItalic() ) ); + actionTextItalic->addTo( tb ); + actionTextItalic->addTo( menu ); + actionTextItalic->setToggleAction( TRUE ); + actionTextUnderline = new QAction( tr( "Underline" ), QPixmap( "textdrawing/textunderline.png" ), tr( "&Underline" ), CTRL + Key_U, this, "textUnderline" ); + connect( actionTextUnderline, SIGNAL( activated() ), this, SLOT( textUnderline() ) ); + actionTextUnderline->addTo( tb ); + actionTextUnderline->addTo( menu ); + actionTextUnderline->setToggleAction( TRUE ); + menu->insertSeparator(); + + QActionGroup *grp = new QActionGroup( this ); + grp->setExclusive( TRUE ); + connect( grp, SIGNAL( selected( QAction* ) ), this, SLOT( textAlign( QAction* ) ) ); + + actionAlignLeft = new QAction( tr( "Left" ), QPixmap( "textdrawing/textleft.png" ), tr( "&Left" ), CTRL + Key_L, grp, "textLeft" ); + actionAlignLeft->addTo( tb ); + actionAlignLeft->addTo( menu ); + actionAlignLeft->setToggleAction( TRUE ); + actionAlignCenter = new QAction( tr( "Center" ), QPixmap( "textdrawing/textcenter.png" ), tr( "C&enter" ), CTRL + Key_M, grp, "textCenter" ); + actionAlignCenter->addTo( tb ); + actionAlignCenter->addTo( menu ); + actionAlignCenter->setToggleAction( TRUE ); + actionAlignRight = new QAction( tr( "Right" ), QPixmap( "textdrawing/textright.png" ), tr( "&Right" ), CTRL + Key_R, grp, "textRight" ); + actionAlignRight->addTo( tb ); + actionAlignRight->addTo( menu ); + actionAlignRight->setToggleAction( TRUE ); + actionAlignJustify = new QAction( tr( "Justify" ), QPixmap( "textdrawing/textjustify.png" ), tr( "&Justify" ), CTRL + Key_J, grp, "textjustify" ); + actionAlignJustify->addTo( tb ); + actionAlignJustify->addTo( menu ); + actionAlignJustify->setToggleAction( TRUE ); + + menu->insertSeparator(); + + QPixmap pix( 16, 16 ); + pix.fill( black ); + actionTextColor = new QAction( tr( "Color" ), pix, tr( "&Color..." ), 0, this, "textColor" ); + connect( actionTextColor, SIGNAL( activated() ), this, SLOT( textColor() ) ); + actionTextColor->addTo( tb ); + actionTextColor->addTo( menu ); +} + +void TextEdit::load( const QString &f ) +{ + if ( !QFile::exists( f ) ) + return; + QTextEdit *edit = new QTextEdit( tabWidget ); + doConnections( edit ); + tabWidget->addTab( edit, QFileInfo( f ).fileName() ); + + QFile fl( f ); + fl.open( IO_ReadOnly ); + QByteArray array = fl.readAll(); + array.resize( array.size() +1 ); + array[ (int)array.size() - 1 ] = '\0'; + QString text = ( f.find( "bidi.txt" ) != -1 ? QString::fromUtf8( array.data() ) : QString::fromLatin1( array.data() ) ); + edit->setText( text ); + + edit->viewport()->setFocus(); + edit->setTextFormat( Qt::RichText ); +} + +QTextEdit *TextEdit::currentEditor() const +{ + if ( tabWidget->currentPage() && + tabWidget->currentPage()->inherits( "QTextEdit" ) ) + return (QTextEdit*)tabWidget->currentPage(); + return 0; +} + +void TextEdit::doConnections( QTextEdit *e ) +{ + connect( e, SIGNAL( currentFontChanged( const QFont & ) ), + this, SLOT( fontChanged( const QFont & ) ) ); + connect( e, SIGNAL( currentColorChanged( const QColor & ) ), + this, SLOT( colorChanged( const QColor & ) ) ); + connect( e, SIGNAL( currentAlignmentChanged( int ) ), + this, SLOT( alignmentChanged( int ) ) ); +} + +void TextEdit::fileNew() +{ + QTextEdit *edit = new QTextEdit( tabWidget ); + doConnections( edit ); + tabWidget->addTab( edit, tr( "noname" ) ); + tabWidget->showPage( edit ); + edit->viewport()->setFocus(); +} + +void TextEdit::fileOpen() +{ + QString fn = QFileDialog::getOpenFileName( QString::null, tr( "HTML-Files (*.htm *.html);;All Files (*)" ), this ); + if ( !fn.isEmpty() ) + load( fn ); +} + +void TextEdit::fileSave() +{ + if ( !currentEditor() ) + return; + QString fn; + if ( filenames.find( currentEditor() ) == filenames.end() ) { + fileSaveAs(); + } else { + QFile file( *filenames.find( currentEditor() ) ); + if ( !file.open( IO_WriteOnly ) ) + return; + QTextStream ts( &file ); + ts << currentEditor()->text(); + } +} + +void TextEdit::fileSaveAs() +{ + if ( !currentEditor() ) + return; + QString fn = QFileDialog::getSaveFileName( QString::null, tr( "HTML-Files (*.htm *.html);;All Files (*)" ), this ); + if ( !fn.isEmpty() ) { + filenames.replace( currentEditor(), fn ); + fileSave(); + tabWidget->setTabLabel( currentEditor(), QFileInfo( fn ).fileName() ); + } +} + +void TextEdit::filePrint() +{ + if ( !currentEditor() ) + return; +#ifndef QT_NO_PRINTER + QPrinter printer; + printer.setFullPage(TRUE); + QPaintDeviceMetrics screen( this ); + printer.setResolution( screen.logicalDpiY() ); + if ( printer.setup( this ) ) { + QPainter p( &printer ); + QPaintDeviceMetrics metrics( p.device() ); + int dpix = metrics.logicalDpiX(); + int dpiy = metrics.logicalDpiY(); + const int margin = 72; // pt + QRect body( margin * dpix / 72, margin * dpiy / 72, + metrics.width() - margin * dpix / 72 * 2, + metrics.height() - margin * dpiy / 72 * 2 ); + QFont font( "times", 10 ); + QSimpleRichText richText( currentEditor()->text(), font, currentEditor()->context(), currentEditor()->styleSheet(), + currentEditor()->mimeSourceFactory(), body.height() ); + richText.setWidth( &p, body.width() ); + QRect view( body ); + int page = 1; + do { + richText.draw( &p, body.left(), body.top(), view, colorGroup() ); + view.moveBy( 0, body.height() ); + p.translate( 0 , -body.height() ); + p.setFont( font ); + p.drawText( view.right() - p.fontMetrics().width( QString::number( page ) ), + view.bottom() + p.fontMetrics().ascent() + 5, QString::number( page ) ); + if ( view.top() >= richText.height() ) + break; + printer.newPage(); + page++; + } while (TRUE); + } +#endif +} + +void TextEdit::fileClose() +{ + delete currentEditor(); + if ( currentEditor() ) + currentEditor()->viewport()->setFocus(); +} + +void TextEdit::fileExit() +{ + qApp->quit(); +} + +void TextEdit::editUndo() +{ + if ( !currentEditor() ) + return; + currentEditor()->undo(); +} + +void TextEdit::editRedo() +{ + if ( !currentEditor() ) + return; + currentEditor()->redo(); +} + +void TextEdit::editCut() +{ + if ( !currentEditor() ) + return; + currentEditor()->cut(); +} + +void TextEdit::editCopy() +{ + if ( !currentEditor() ) + return; + currentEditor()->copy(); +} + +void TextEdit::editPaste() +{ + if ( !currentEditor() ) + return; + currentEditor()->paste(); +} + +void TextEdit::textBold() +{ + if ( !currentEditor() ) + return; + currentEditor()->setBold( actionTextBold->isOn() ); +} + +void TextEdit::textUnderline() +{ + if ( !currentEditor() ) + return; + currentEditor()->setUnderline( actionTextUnderline->isOn() ); +} + +void TextEdit::textItalic() +{ + if ( !currentEditor() ) + return; + currentEditor()->setItalic( actionTextItalic->isOn() ); +} + +void TextEdit::textFamily( const QString &f ) +{ + if ( !currentEditor() ) + return; + currentEditor()->setFamily( f ); + currentEditor()->viewport()->setFocus(); +} + +void TextEdit::textSize( const QString &p ) +{ + if ( !currentEditor() ) + return; + currentEditor()->setPointSize( p.toInt() ); + currentEditor()->viewport()->setFocus(); +} + +void TextEdit::textStyle( int i ) +{ + if ( !currentEditor() ) + return; + if ( i == 0 ) + currentEditor()->setParagType( QStyleSheetItem::DisplayBlock, QStyleSheetItem::ListDisc ); + else if ( i == 1 ) + currentEditor()->setParagType( QStyleSheetItem::DisplayListItem, QStyleSheetItem::ListDisc ); + else if ( i == 2 ) + currentEditor()->setParagType( QStyleSheetItem::DisplayListItem, QStyleSheetItem::ListCircle ); + else if ( i == 3 ) + currentEditor()->setParagType( QStyleSheetItem::DisplayListItem, QStyleSheetItem::ListSquare ); + else if ( i == 4 ) + currentEditor()->setParagType( QStyleSheetItem::DisplayListItem, QStyleSheetItem::ListDecimal ); + else if ( i == 5 ) + currentEditor()->setParagType( QStyleSheetItem::DisplayListItem, QStyleSheetItem::ListLowerAlpha ); + else if ( i == 6 ) + currentEditor()->setParagType( QStyleSheetItem::DisplayListItem, QStyleSheetItem::ListUpperAlpha ); + currentEditor()->viewport()->setFocus(); +} + +void TextEdit::textColor() +{ + if ( !currentEditor() ) + return; + QColor col = QColorDialog::getColor( currentEditor()->color(), this ); + if ( !col.isValid() ) + return; + currentEditor()->setColor( col ); + QPixmap pix( 16, 16 ); + pix.fill( col ); + actionTextColor->setIconSet( pix ); +} + +void TextEdit::textAlign( QAction *a ) +{ + if ( !currentEditor() ) + return; + if ( a == actionAlignLeft ) + currentEditor()->setAlignment( AlignLeft ); + else if ( a == actionAlignCenter ) + currentEditor()->setAlignment( AlignHCenter ); + else if ( a == actionAlignRight ) + currentEditor()->setAlignment( AlignRight ); + else if ( a == actionAlignJustify ) + currentEditor()->setAlignment( AlignJustify ); +} + +void TextEdit::fontChanged( const QFont &f ) +{ + comboFont->lineEdit()->setText( f.family() ); + comboSize->lineEdit()->setText( QString::number( f.pointSize() ) ); + actionTextBold->setOn( f.bold() ); + actionTextItalic->setOn( f.italic() ); + actionTextUnderline->setOn( f.underline() ); +} + +void TextEdit::colorChanged( const QColor &c ) +{ + QPixmap pix( 16, 16 ); + pix.fill( c ); + actionTextColor->setIconSet( pix ); +} + +void TextEdit::alignmentChanged( int a ) +{ + if ( ( a == AlignAuto ) || ( a & AlignLeft )) + actionAlignLeft->setOn( TRUE ); + else if ( ( a & AlignHCenter ) ) + actionAlignCenter->setOn( TRUE ); + else if ( ( a & AlignRight ) ) + actionAlignRight->setOn( TRUE ); + else if ( ( a & AlignJustify ) ) + actionAlignJustify->setOn( TRUE ); +} + +void TextEdit::editorChanged( QWidget * ) +{ + if ( !currentEditor() ) + return; + fontChanged( currentEditor()->font() ); + colorChanged( currentEditor()->color() ); + alignmentChanged( currentEditor()->alignment() ); +} diff --git a/examples/demo/textdrawing/textedit.h b/examples/demo/textdrawing/textedit.h new file mode 100644 index 0000000..b1c3d95 --- /dev/null +++ b/examples/demo/textdrawing/textedit.h @@ -0,0 +1,85 @@ +/**************************************************************************** +** +** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved. +** +** This file is part of an example program for Qt. This example +** program may be used, distributed and modified without limitation. +** +*****************************************************************************/ + +#ifndef TEXTEDIT_H +#define TEXTEDIT_H + +#include <qmainwindow.h> +#include <qmap.h> + +class QAction; +class QComboBox; +class QTabWidget; +class QTextEdit; + +class TextEdit : public QMainWindow +{ + Q_OBJECT + +public: + TextEdit( QWidget *parent = 0, const char *name = 0 ); + + QTextEdit *currentEditor() const; + void load( const QString &f ); + + +public slots: + void fileNew(); + void fileOpen(); + void fileSave(); + void fileSaveAs(); + void filePrint(); + void fileClose(); + void fileExit(); + + void editUndo(); + void editRedo(); + void editCut(); + void editCopy(); + void editPaste(); + + void textBold(); + void textUnderline(); + void textItalic(); + void textFamily( const QString &f ); + void textSize( const QString &p ); + void textStyle( int s ); + void textColor(); + void textAlign( QAction *a ); + + void fontChanged( const QFont &f ); + void colorChanged( const QColor &c ); + void alignmentChanged( int a ); + void editorChanged( QWidget * ); + + +private: + void setupFileActions(); + void setupEditActions(); + void setupTextActions(); + void doConnections( QTextEdit *e ); + + QAction *actionTextBold, + *actionTextUnderline, + *actionTextItalic, + *actionTextColor, + *actionAlignLeft, + *actionAlignCenter, + *actionAlignRight, + *actionAlignJustify; + QComboBox *comboStyle, + *comboFont, + *comboSize; + QTabWidget *tabWidget; + QMap<QTextEdit*, QString> filenames; + +}; + + +#endif diff --git a/examples/demo/textdrawing/textitalic.png b/examples/demo/textdrawing/textitalic.png Binary files differnew file mode 100644 index 0000000..68e2b44 --- /dev/null +++ b/examples/demo/textdrawing/textitalic.png diff --git a/examples/demo/textdrawing/textjustify.png b/examples/demo/textdrawing/textjustify.png Binary files differnew file mode 100644 index 0000000..1c6e5b9 --- /dev/null +++ b/examples/demo/textdrawing/textjustify.png diff --git a/examples/demo/textdrawing/textleft.png b/examples/demo/textdrawing/textleft.png Binary files differnew file mode 100644 index 0000000..30b0501 --- /dev/null +++ b/examples/demo/textdrawing/textleft.png diff --git a/examples/demo/textdrawing/textright.png b/examples/demo/textdrawing/textright.png Binary files differnew file mode 100644 index 0000000..73f1cad --- /dev/null +++ b/examples/demo/textdrawing/textright.png diff --git a/examples/demo/textdrawing/textunderline.png b/examples/demo/textdrawing/textunderline.png Binary files differnew file mode 100644 index 0000000..3477ccb --- /dev/null +++ b/examples/demo/textdrawing/textunderline.png diff --git a/examples/demo/textdrawing/undo.png b/examples/demo/textdrawing/undo.png Binary files differnew file mode 100644 index 0000000..d5b6c16 --- /dev/null +++ b/examples/demo/textdrawing/undo.png |