summaryrefslogtreecommitdiffstats
path: root/kturtle/src/dialogs.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kturtle/src/dialogs.cpp')
-rw-r--r--kturtle/src/dialogs.cpp320
1 files changed, 320 insertions, 0 deletions
diff --git a/kturtle/src/dialogs.cpp b/kturtle/src/dialogs.cpp
new file mode 100644
index 00000000..044f36f4
--- /dev/null
+++ b/kturtle/src/dialogs.cpp
@@ -0,0 +1,320 @@
+/*
+ KTurtle, Copyright (C) 2003-04 Cies Breijs <cies # kde ! nl>
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of version 2 of the GNU General Public
+ License as published by the Free Software Foundation.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+
+#include <kapplication.h>
+#include <kdebug.h>
+#include <klocale.h>
+
+#include "dialogs.h"
+
+
+// BEGIN class ErrorMessage dialog
+
+ErrorMessage::ErrorMessage (QWidget *parent)
+ : KDialogBase (parent, "errorDialog", false, 0, KDialogBase::Close | KDialogBase::Help | KDialogBase::User1, KDialogBase::Close, true, i18n("Help on &Error") )
+{
+ connect( this, SIGNAL( user1Clicked() ), this, SLOT( showHelpOnError() ) );
+ connect( this, SIGNAL( helpClicked() ), this, SLOT( errorMessageHelp() ) );
+ setCaption( i18n("Error Dialog") );
+ setButtonWhatsThis( KDialogBase::Close, i18n("Closes this error dialog") );
+ setButtonWhatsThis( KDialogBase::Help, i18n("Click here to read more on this error dialog in KTurtle's Handbook.") );
+ setButtonTip( KDialogBase::Help, i18n("Click here for help using this error dialog") );
+ setButtonWhatsThis( KDialogBase::User1, i18n("Click here for help regarding the error you selected in the list. This button will not work when no error is selected.") );
+ setButtonTip( KDialogBase::User1, i18n("Click here for help regarding the error you selected.") );
+
+ QWidget *baseWidget = new QWidget(this);
+ setMainWidget(baseWidget);
+ baseLayout = new QVBoxLayout(baseWidget);
+
+ label = new QLabel(baseWidget);
+ label->setText( i18n("In this list you find the error(s) that resulted from running your Logo code. \nGood luck!") );
+ // \nYou can select an error and click the 'Help on Error' button for help.
+ label->setScaledContents(true);
+ baseLayout->addWidget(label);
+
+ spacer = new QSpacerItem( 10, 10, QSizePolicy::Minimum, QSizePolicy::Fixed );
+ baseLayout->addItem(spacer);
+
+ errTable = new QTable(0, 3, baseWidget);
+ errTable->setSelectionMode(QTable::SingleRow);
+ errTable->setReadOnly(true);
+ errTable->setShowGrid(false);
+ errTable->setFocusStyle(QTable::FollowStyle);
+ errTable->setLeftMargin(0);
+
+ errTable->horizontalHeader()->setLabel( 0, i18n("number") );
+ errTable->hideColumn(0); // needed to link with the errorData which stores the tokens, codes, etc.
+
+ errTable->horizontalHeader()->setLabel( 1, i18n("line") );
+ errTable->setColumnWidth(1, baseWidget->fontMetrics().width("88888") );
+
+ errTable->horizontalHeader()->setLabel( 2, i18n("description") );
+ errTable->setColumnStretchable(2, true);
+
+ baseLayout->addWidget(errTable);
+
+ // Since both help buttons are not working yet. Doc need a section on the Error Dialog!
+ enableButton(KDialogBase::Help, false);
+ enableButton(KDialogBase::User1, false);
+
+ errCount = 1;
+}
+
+
+void ErrorMessage::slotAddError(Token& t, const QString& s, uint c)
+{
+ errorData err;
+ err.code = c;
+ err.tok = t;
+ err.msg = s;
+ errList.append(err);
+
+ Token currentToken = err.tok; kdDebug(0)<<"ErrorMessage::slotAddError(); >> "<<err.msg<<" <<, token: '"<<currentToken.look<<"', @ ("<<currentToken.start.row<<", "<<currentToken.start.col<<") - ("<<currentToken.end.row<<", "<<currentToken.end.col<<"), tok-number:"<<currentToken.type<<endl;
+
+ errTable->insertRows(0);
+ errTable->setText( 0, 0, QString::number(errCount) ); // put the count in a hidden field for reference
+ errTable->setText( 0, 1, QString::number(err.tok.start.row) );
+ errTable->setText( 0, 2, err.msg );
+
+ errCount++;
+}
+
+
+bool ErrorMessage::containsErrors()
+{
+ if (errTable->numRows() != 0) return true;
+ return false;
+}
+
+void ErrorMessage::display()
+{
+ errTable->clearSelection();
+ enableButton (KDialogBase::User1, false);
+ errTable->sortColumn(0, true, true);
+ show();
+ connect( errTable, SIGNAL( selectionChanged() ), this, SLOT( updateSelection() ) );
+}
+
+void ErrorMessage::updateSelection()
+{
+ int i = errTable->text( errTable->currentRow(), 0 ).toInt(); // get the hidden errCount value
+ currentError = *errList.at(i - 1);
+ emit setSelection(currentError.tok.start.row, currentError.tok.start.col,
+ currentError.tok.end.row, currentError.tok.end.col);
+// #if 0 // FIXME
+// if ( tokenTypeNames[currentError.tok.type].isEmpty() ) enableButton(KDialogBase::User1, true);
+// else enableButton(KDialogBase::User1, false);
+// #endif
+}
+
+void ErrorMessage::showHelpOnError()
+{
+// #if 0 // FIXME
+// kapp->invokeHelp(tokenTypeNames[currentError.tok.type], "", "");
+// #endif
+}
+
+void ErrorMessage::errorMessageHelp()
+{
+ kapp->invokeHelp("anchorname", "", "");
+}
+
+// END
+
+
+
+// BEGIN class ColorPicker dialog
+
+ColorPicker::ColorPicker(QWidget *parent)
+ : KDialogBase(parent, "colorpicker", false, i18n("Color Picker"), KDialogBase::Close | KDialogBase::Help | KDialogBase::User1, KDialogBase::Close, true )
+{
+ // connect to help
+ connect( this, SIGNAL( helpClicked() ), SLOT( slotColorPickerHelp() ) );
+
+ // for toggling convenience
+ connect( this, SIGNAL( finished() ), SLOT( slotEmitVisibility() ) );
+
+ // Create the top level page and its layout
+ BaseWidget = new QWidget(this);
+ setMainWidget(BaseWidget);
+
+ // the User1 button:
+ setButtonText( KDialogBase::User1, i18n("Insert Color Code at Cursor") );
+ connect( this, SIGNAL( user1Clicked() ), SLOT( slotEmitColorCode() ) );
+
+ QVBoxLayout *vlayout = new QVBoxLayout(BaseWidget);
+
+ vlayout->addSpacing(5); // spacing on top
+
+ // the palette and value selector go into a H-box
+ QHBoxLayout *h1layout = new QHBoxLayout(BaseWidget);
+ vlayout->addLayout(h1layout);
+
+ h1layout->addSpacing(10); // space on the left border
+
+ hsSelector = new KHSSelector(BaseWidget); // the color (SH) selector
+ hsSelector->setMinimumSize(300, 150);
+ h1layout->addWidget(hsSelector);
+ connect( hsSelector, SIGNAL( valueChanged(int, int) ), SLOT( slotSelectorChanged(int, int) ) );
+
+ h1layout->addSpacing(5); // space in between
+
+ valuePal = new KValueSelector(BaseWidget); // the darkness (V) pal
+ valuePal->setFixedWidth(30);
+ h1layout->addWidget(valuePal);
+ connect( valuePal, SIGNAL( valueChanged(int) ), SLOT( slotPalChanged(int) ) );
+
+ vlayout->addSpacing(15); // space in between the top and the bottom widgets
+
+ // the patch and the codegenerator also go into a H-box
+ QHBoxLayout *h2layout = new QHBoxLayout(BaseWidget);
+ vlayout->addLayout(h2layout);
+
+ h2layout->addSpacing(10); // space on the left border
+
+ patch = new KColorPatch(BaseWidget); // the patch (color previewer)
+ patch->setFixedSize(50, 50);
+ h2layout->addWidget(patch);
+
+ h2layout->addSpacing(10); // space in between
+
+ // the label and the codegenerator go in a V-box
+ QVBoxLayout *v2layout = new QVBoxLayout(BaseWidget);
+ h2layout->addLayout(v2layout);
+
+ copyable = new QLabel(i18n("Color code:"), BaseWidget); // tha label
+ v2layout->addWidget(copyable);
+
+ colorcode = new QLineEdit(BaseWidget); // the code generator
+ colorcode->setReadOnly(true);
+ v2layout->addWidget(colorcode);
+ connect( colorcode, SIGNAL( selectionChanged() ), SLOT( slotReselect() ) );
+
+ h2layout->addSpacing(5); // spacing on the right border
+
+ vlayout->addSpacing(10); // spacing on the bottom
+
+ h = g = b = 0; // start with red
+ s = v = r = 255;
+
+ slotSelectorChanged(h, s); // update all at once
+}
+
+
+
+void ColorPicker::updateSelector()
+{
+ hsSelector->setValues(h, s);
+}
+
+void ColorPicker::updatePal()
+{
+ valuePal->setHue(h);
+ valuePal->setSaturation(s);
+ valuePal->setValue(v);
+ valuePal->updateContents();
+ valuePal->repaint(false);
+}
+
+void ColorPicker::updatePatch()
+{
+ patch->setColor(color);
+}
+
+void ColorPicker::updateColorCode()
+{
+ color.getRgb(&r, &g, &b);
+ colorcode->setText( QString("%1, %2, %3").arg(r).arg(g).arg(b) );
+ colorcode->selectAll();
+}
+
+void ColorPicker::slotSelectorChanged(int h_, int s_)
+{
+ h = h_;
+ s = s_;
+ color.setHsv(h, s, v);
+
+ //updateSelector(); // updated it self allready
+ updatePal();
+ updatePatch();
+ updateColorCode();
+}
+
+void ColorPicker::slotPalChanged(int v_)
+{
+ v = v_;
+ color.setHsv(h, s, v);
+
+ //updateSelector(); // only needed when H or S changes
+ //updatePal(); // updated it self allready
+ updatePatch();
+ updateColorCode();
+}
+
+void ColorPicker::slotReselect()
+{
+ // reselect by selectAll(), but make sure no looping occurs
+ disconnect( colorcode, SIGNAL( selectionChanged() ), 0, 0 );
+ colorcode->selectAll();
+ connect( colorcode, SIGNAL( selectionChanged() ), SLOT( slotReselect() ) );
+}
+
+void ColorPicker::slotEmitVisibility()
+{
+ // for toggling convenience
+ emit visible(false);
+}
+
+void ColorPicker::slotEmitColorCode()
+{
+ // convenience
+ emit ColorCode( colorcode->text() );
+}
+
+void ColorPicker::slotColorPickerHelp()
+{
+ kapp->invokeHelp("tools-color-picker", "", "");
+}
+
+// END
+
+
+
+// BEGIN class RestartOrBack dialog
+
+RestartOrBack::RestartOrBack (QWidget *parent)
+ : KDialogBase (parent, "rbDialog", true, 0, KDialogBase::User1 | KDialogBase::User2, KDialogBase::User2, false, i18n("&Restart"), i18n("&Back") )
+{
+ setPlainCaption( i18n("Finished Execution") );
+ setButtonWhatsThis( KDialogBase::User1, i18n("Click here to restart the current logo program.") );
+ setButtonWhatsThis( KDialogBase::User2, i18n("Click here to switch back to the edit mode.") );
+ QWidget *baseWidget = new QWidget(this);
+ setMainWidget(baseWidget);
+ baseLayout = new QVBoxLayout(baseWidget);
+
+ label = new QLabel(baseWidget);
+ label->setText( i18n("Execution was finished without errors.\nWhat do you want to do next?") );
+ label->setScaledContents(true);
+ baseLayout->addWidget(label);
+ disableResize();
+}
+
+// END
+
+
+#include "dialogs.moc"