From 2bda8f7717adf28da4af0d34fb82f63d2868c31d Mon Sep 17 00:00:00 2001 From: toma Date: Wed, 25 Nov 2009 17:56:58 +0000 Subject: Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features. BUG:215923 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdeutils@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- kcharselect/kcharselectdia.cc | 289 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 289 insertions(+) create mode 100644 kcharselect/kcharselectdia.cc (limited to 'kcharselect/kcharselectdia.cc') diff --git a/kcharselect/kcharselectdia.cc b/kcharselect/kcharselectdia.cc new file mode 100644 index 0000000..43e13b0 --- /dev/null +++ b/kcharselect/kcharselectdia.cc @@ -0,0 +1,289 @@ +/******************************************************************/ +/* KCharSelectDia - (c) by Reginald Stadlbauer 1999 */ +/* Author: Reginald Stadlbauer */ +/* E-Mail: reggie@kde.org */ +/* RTL support by Bryce Nesbitt */ +/******************************************************************/ + +#include "kcharselectdia.moc" + +#include + +#include +#include +#include +#include +#include +#include + +/******************************************************************/ +/* class KCharSelectDia */ +/******************************************************************/ + +//================================================================== +KCharSelectDia::KCharSelectDia(QWidget *parent,const char *name, + const QChar &_chr,const QString &_font, + int _tableNum, bool direction) + : KMainWindow(parent,name), vChr(_chr), vFont(_font) +{ + setCaption(QString::null); // Standard caption + + QWidget *mainWidget = new QWidget(this); + setCentralWidget(mainWidget); + + grid = new QGridLayout( mainWidget, 3, 4, KDialog::marginHint(), KDialog::spacingHint() ); + + // Add character selection widget from library kdeui + charSelect = new KCharSelect(mainWidget,"",vFont,vChr,_tableNum); + charSelect->resize(charSelect->sizeHint()); + connect(charSelect,SIGNAL(highlighted(const QChar &)), + SLOT(charChanged(const QChar &))); + connect(charSelect,SIGNAL(activated(const QChar &)), + SLOT(add(const QChar &))); + connect(charSelect,SIGNAL(fontChanged(const QString &)), + SLOT(fontSelected(const QString &))); + grid->addMultiCellWidget(charSelect, 0, 0, 0, 3); + + // Build line editor + lined = new QLineEdit(mainWidget); + lined->resize(lined->sizeHint()); + + QFont font = lined->font(); + font.setFamily( vFont ); + lined->setFont( font ); + + connect(lined,SIGNAL(textChanged(const QString &)), + SLOT(lineEditChanged())); + grid->addMultiCellWidget(lined, 1, 1, 0, 3); + + // Build some buttons + bHelp = new KPushButton( KStdGuiItem::help(), mainWidget ); + connect(bHelp,SIGNAL(clicked()),this,SLOT(help())); + bHelp->setFixedSize( bHelp->sizeHint() ); + grid->addWidget( bHelp, 2, 0 ); + + QSpacerItem *space = new QSpacerItem( 20, 20, QSizePolicy::Expanding ); + grid->addItem( space, 2, 1 ); + + bClear = new KPushButton( KStdGuiItem::clear(), mainWidget ); + connect(bClear,SIGNAL(clicked()),this,SLOT(clear())); + bClear->setFixedSize( bClear->sizeHint() ); + grid->addWidget( bClear, 2, 2 ); + + bClip = new KPushButton( KGuiItem( i18n( "&To Clipboard" ), + "editcopy" ), mainWidget ); + bClip->setFixedSize( bClip->sizeHint() ); + connect(bClip,SIGNAL(clicked()),this,SLOT(toClip())); + grid->addWidget( bClip, 2, 3 ); + + // Build menu + KStdAction::quit( this, SLOT(_exit()), actionCollection() ); + + new KAction(i18n("&To Clipboard"), "editcopy", + KStdAccel::shortcut(KStdAccel::Copy), this, SLOT(toClip()), actionCollection(), "copy_clip" ); + + (void)new KAction(i18n("To Clipboard &UTF-8"), 0, this, + SLOT(toClipUTF8()), actionCollection(), "copy_utf_8" ); + (void)new KAction(i18n("To Clipboard &HTML"), 0, this, + SLOT(toClipHTML()), actionCollection(), "copy_html" ); + + new KAction(i18n("&From Clipboard"), "editpaste", + KStdAccel::shortcut(KStdAccel::Paste), this, SLOT(fromClip()), actionCollection(), "from_clip" ); + (void)new KAction(i18n("From Clipboard UTF-8"), 0, this, + SLOT(fromClipUTF8()), actionCollection(), "from_clip_utf8" ); + + i18n("From Clipboard HTML"); // Intended for future use + + KStdAction::clear(this, SLOT(clear()), actionCollection(), "clear"); + (void)new KAction(i18n("&Flip"), 0, this, + SLOT(flipText()), actionCollection(), "flip" ); + (void)new KAction(i18n("&Alignment"), 0, this, + SLOT(toggleEntryDirection()), actionCollection(), "alignment" ); + + charSelect->setFocus(); + + entryDirection = direction; + if( entryDirection ) + lined->setAlignment( Qt::AlignRight ); + else + lined->setAlignment( Qt::AlignLeft ); + + setupGUI(Keys|StatusBar|Save|Create); +} + +//================================================================== +void KCharSelectDia::charChanged(const QChar &_chr) +{ + vChr = _chr; +} + +//================================================================== +void KCharSelectDia::fontSelected(const QString &_font) +{ + charSelect->setFont(_font); + + QFont font = lined->font(); + font.setFamily( _font ); + lined->setFont( font ); + + vFont = _font; +} + +//================================================================== +void KCharSelectDia::add(const QChar &_chr) +{ + QString str; + int cursorPos; + + charChanged(_chr); + + str = lined->text(); + cursorPos = lined->cursorPosition(); + str.insert( cursorPos, vChr ); + lined->setText(str); + cursorPos++; + lined->setCursorPosition( cursorPos ); +} + +//================================================================== +void KCharSelectDia::toClip() +{ + QClipboard *cb = QApplication::clipboard(); + cb->setSelectionMode( true ); + cb->setText(lined->text()); + cb->setSelectionMode( false ); + cb->setText(lined->text()); +} + +//================================================================== +// UTF-8 is rapidly becoming the favored 8-bit encoding for +// Unicode (iso10646-1). +// +void KCharSelectDia::toClipUTF8() +{ + QClipboard *cb = QApplication::clipboard(); + QString str = lined->text(); + cb->setText(str.utf8()); +} + +//================================================================== +// Put valid HTML 4.0 into the clipboard. Valid ISO-8859-1 Latin 1 +// characters are left undisturbed. Everything else, including the +// "c0 control characters" often used by Windows, are clipped +// as a HTML entity. +// +void KCharSelectDia::toClipHTML() +{ + QClipboard *cb = QApplication::clipboard(); + QString input; + QString html; + QString tempstring; + QChar tempchar; + uint i; + + input = lined->text(); + for(i=0; i< input.length(); i++ ) + { + tempchar = input.at(i); + if( tempchar.latin1() && ((tempchar.unicode() < 128) || (tempchar.unicode() >= 128+32)) ) + { + html.append(input.at(i)); + } + else + { + html.append(tempstring.sprintf("&#x%x;", tempchar.unicode())); + } + } + cb->setText(html); +} + +//================================================================== +// +void KCharSelectDia::fromClip() +{ + QClipboard *cb = QApplication::clipboard(); + lined->setText( cb->text() ); +} + +//================================================================== +// UTF-8 is rapidly becoming the favored 8-bit encoding for +// Unicode (iso10646-1). This function is handy for decoding +// UTF-8 found in legacy applications, consoles, filenames, webpages, +// etc. +// +void KCharSelectDia::fromClipUTF8() +{ + QClipboard *cb = QApplication::clipboard(); + QString str = cb->text(); + + lined->setText( str.fromUtf8( str.latin1() ) ); +} + +//================================================================== +// Reverse the text held in the line edit buffer. This is crucial +// for dealing with visual vs. logical representations of +// right to left languages, and handy for working around all +// manner of legacy character order issues. +// +void KCharSelectDia::flipText() +{ + QString input; + QString output; + uint i; + + input = lined->text(); + for(i=0; i< input.length(); i++ ) + { + output.prepend( input.at(i) ); + } + lined->setText(output); +} + +//================================================================== +void KCharSelectDia::toggleEntryDirection() +{ + entryDirection ^= 1; + if( entryDirection ) + lined->setAlignment( Qt::AlignRight ); + else + lined->setAlignment( Qt::AlignLeft ); +} + +//================================================================== +void KCharSelectDia::lineEditChanged() +{ + if( entryDirection ) + { + if(lined->cursorPosition()) + lined->setCursorPosition( lined->cursorPosition() - 1 ); + } +} + +//================================================================== +void KCharSelectDia::_exit() +{ + KConfig *config = kapp->config(); + + config->setGroup("General"); + config->writeEntry("selectedFont",vFont); + config->writeEntry("char",static_cast(vChr.unicode())); + config->writeEntry("table",charSelect->tableNum()); + config->writeEntry("entryDirection",entryDirection); + config->sync(); + + delete this; + exit(0); +} + +//================================================================== +void KCharSelectDia::clear() +{ + lined->clear(); +} + +//================================================================== +void KCharSelectDia::help() +{ + kapp->invokeHelp(); +} + -- cgit v1.2.1