00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <tqclipboard.h>
00022 #include <tqptrlist.h>
00023 #include <tqtooltip.h>
00024
00025 #include <kdebug.h>
00026 #include <tdeaction.h>
00027 #include <kxmlguifactory.h>
00028 #include <kxmlguibuilder.h>
00029 #include <ksystemtray.h>
00030 #include <tdelocale.h>
00031 #include <kiconeffect.h>
00032 #include <kstandarddirs.h>
00033 #include <tdepopupmenu.h>
00034 #include <khelpmenu.h>
00035 #include <kfind.h>
00036 #include <kfinddialog.h>
00037 #include <kkeydialog.h>
00038 #include <kglobalaccel.h>
00039 #include <ksimpleconfig.h>
00040 #include <twin.h>
00041 #include <kbufferedsocket.h>
00042 #include <kserversocket.h>
00043
00044 #include <libkcal/journal.h>
00045 #include <libkcal/calendarlocal.h>
00046
00047 #include "knotesapp.h"
00048 #include "knote.h"
00049 #include "knotesalarm.h"
00050 #include "knoteconfigdlg.h"
00051 #include "knotesglobalconfig.h"
00052 #include "knoteslegacy.h"
00053 #include "knotesnetrecv.h"
00054
00055 #include "knotes/resourcemanager.h"
00056
00057 using namespace KNetwork;
00058
00059
00060 class KNotesKeyDialog : public KDialogBase
00061 {
00062 public:
00063 KNotesKeyDialog( TDEGlobalAccel *globals, TQWidget *parent, const char* name = 0 )
00064 : KDialogBase( parent, name, true, i18n("Configure Shortcuts"), Default|Ok|Cancel, Ok )
00065 {
00066 m_keyChooser = new KKeyChooser( globals, this );
00067 setMainWidget( m_keyChooser );
00068 connect( this, TQT_SIGNAL(defaultClicked()), m_keyChooser, TQT_SLOT(allDefault()) );
00069 }
00070
00071 void insert( TDEActionCollection *actions )
00072 {
00073 m_keyChooser->insert( actions, i18n("Note Actions") );
00074 }
00075
00076 void configure()
00077 {
00078 if ( exec() == Accepted )
00079 m_keyChooser->save();
00080 }
00081
00082 private:
00083 KKeyChooser *m_keyChooser;
00084 };
00085
00086
00087 int KNotesApp::KNoteActionList::compareItems( TQPtrCollection::Item s1, TQPtrCollection::Item s2 )
00088 {
00089 if ( ((TDEAction*)s1)->text() == ((TDEAction*)s2)->text() )
00090 return 0;
00091 return ( ((TDEAction*)s1)->text() < ((TDEAction*)s2)->text() ? -1 : 1 );
00092 }
00093
00094
00095 KNotesApp::KNotesApp()
00096 : DCOPObject("KNotesIface"), TQLabel( 0, 0, WType_TopLevel ),
00097 m_alarm( 0 ), m_listener( 0 ), m_find( 0 ), m_findPos( 0 )
00098 {
00099 connect( kapp, TQT_SIGNAL(lastWindowClosed()), kapp, TQT_SLOT(quit()) );
00100
00101 m_noteList.setAutoDelete( true );
00102 m_noteActions.setAutoDelete( true );
00103
00104
00105 KWin::setSystemTrayWindowFor( winId(), tqt_xrootwin() );
00106 TQToolTip::add( this, i18n( "KNotes: Sticky notes for TDE" ) );
00107 setBackgroundMode( X11ParentRelative );
00108 setPixmap( KSystemTray::loadIcon( "knotes" ) );
00109
00110
00111 KNote::setStyle( KNotesGlobalConfig::style() );
00112
00113
00114 new TDEAction( i18n("New Note"), "document-new", 0,
00115 TQT_TQOBJECT(this), TQT_SLOT(newNote()), actionCollection(), "new_note" );
00116 new TDEAction( i18n("New Note From Clipboard"), "edit-paste", 0,
00117 TQT_TQOBJECT(this), TQT_SLOT(newNoteFromClipboard()), actionCollection(), "new_note_clipboard" );
00118 new TDEAction( i18n("Show All Notes"), "knotes", 0,
00119 TQT_TQOBJECT(this), TQT_SLOT(showAllNotes()), actionCollection(), "show_all_notes" );
00120 new TDEAction( i18n("Hide All Notes"), "window-close", 0,
00121 TQT_TQOBJECT(this), TQT_SLOT(hideAllNotes()), actionCollection(), "hide_all_notes" );
00122 new KHelpMenu( this, kapp->aboutData(), false, actionCollection() );
00123
00124 m_findAction = KStdAction::find( TQT_TQOBJECT(this), TQT_SLOT(slotOpenFindDialog()), actionCollection() );
00125 KStdAction::preferences( TQT_TQOBJECT(this), TQT_SLOT(slotPreferences()), actionCollection() );
00126 KStdAction::keyBindings( TQT_TQOBJECT(this), TQT_SLOT(slotConfigureAccels()), actionCollection() );
00127
00128 KStdAction::quit( TQT_TQOBJECT(this), TQT_SLOT(slotQuit()), actionCollection() )->setShortcut( 0 );
00129
00130 setXMLFile( instance()->instanceName() + "appui.rc" );
00131
00132 m_guiBuilder = new KXMLGUIBuilder( this );
00133 m_guiFactory = new KXMLGUIFactory( m_guiBuilder, TQT_TQOBJECT(this) );
00134 m_guiFactory->addClient( this );
00135
00136 m_context_menu = static_cast<TDEPopupMenu*>(m_guiFactory->container( "knotes_context", this ));
00137 m_note_menu = static_cast<TDEPopupMenu*>(m_guiFactory->container( "notes_menu", this ));
00138
00139
00140 TQString xmlFileName = instance()->instanceName() + "ui.rc";
00141 TQString filter = TQString::fromLatin1( instance()->instanceName() + '/' ) + xmlFileName;
00142 TQStringList fileList = instance()->dirs()->findAllResources( "data", filter ) +
00143 instance()->dirs()->findAllResources( "data", xmlFileName );
00144
00145 TQString doc;
00146 KXMLGUIClient::findMostRecentXMLFile( fileList, doc );
00147 m_noteGUI.setContent( doc );
00148
00149
00150 m_globalAccel = new TDEGlobalAccel( TQT_TQOBJECT(this), "global accel" );
00151 m_globalAccel->insert( "global_new_note", i18n("New Note"), "",
00152 ALT+SHIFT+Key_N, ALT+SHIFT+Key_N ,
00153 TQT_TQOBJECT(this), TQT_SLOT(newNote()), true, true );
00154 m_globalAccel->insert( "global_new_note_clipboard", i18n("New Note From Clipboard"), "",
00155 ALT+SHIFT+Key_C, ALT+SHIFT+Key_C,
00156 TQT_TQOBJECT(this), TQT_SLOT(newNoteFromClipboard()), true, true );
00157 m_globalAccel->insert( "global_hide_all_notes", i18n("Hide All Notes"), "",
00158 ALT+SHIFT+Key_H, ALT+SHIFT+Key_H ,
00159 TQT_TQOBJECT(this), TQT_SLOT(hideAllNotes()), true, true );
00160 m_globalAccel->insert( "global_show_all_notes", i18n("Show All Notes"), "",
00161 ALT+SHIFT+Key_S, ALT+SHIFT+Key_S,
00162 TQT_TQOBJECT(this), TQT_SLOT(showAllNotes()), true, true );
00163
00164 m_globalAccel->readSettings();
00165
00166 TDEConfig *config = TDEGlobal::config();
00167 config->setGroup( "Global Keybindings" );
00168 m_globalAccel->setEnabled( config->readBoolEntry( "Enabled", true ) );
00169
00170 updateGlobalAccels();
00171
00172
00173 KNotesLegacy::cleanUp();
00174
00175
00176 m_manager = new KNotesResourceManager();
00177 connect( m_manager, TQT_SIGNAL(sigRegisteredNote( KCal::Journal * )),
00178 this, TQT_SLOT(createNote( KCal::Journal * )) );
00179 connect( m_manager, TQT_SIGNAL(sigDeregisteredNote( KCal::Journal * )),
00180 this, TQT_SLOT(killNote( KCal::Journal * )) );
00181
00182
00183 m_manager->load();
00184
00185
00186 KCal::CalendarLocal calendar( TQString::fromLatin1( "UTC" ) );
00187 if ( KNotesLegacy::convert( &calendar ) )
00188 {
00189 KCal::Journal::List notes = calendar.journals();
00190 KCal::Journal::List::ConstIterator it;
00191 for ( it = notes.constBegin(); it != notes.constEnd(); ++it )
00192 m_manager->addNewNote( *it );
00193
00194 m_manager->save();
00195 }
00196
00197
00198
00199 m_alarm = new KNotesAlarm( m_manager, TQT_TQOBJECT(this) );
00200
00201
00202 m_listener = new TDEServerSocket();
00203 m_listener->setResolutionEnabled( true );
00204 connect( m_listener, TQT_SIGNAL(readyAccept()), TQT_SLOT(acceptConnection()) );
00205 updateNetworkListener();
00206
00207 if ( m_noteList.count() == 0 && !kapp->isRestored() )
00208 newNote();
00209
00210 updateNoteActions();
00211 }
00212
00213 void KNotesApp::resizeTrayIcon ()
00214 {
00215
00216 TQPixmap origpixmap;
00217 TQPixmap scaledpixmap;
00218 TQImage newIcon;
00219 origpixmap = KSystemTray::loadSizedIcon( "knotes", TQWidget::width() );
00220 newIcon = origpixmap;
00221 newIcon = newIcon.smoothScale(TQWidget::width(), TQWidget::height());
00222 scaledpixmap = newIcon;
00223 setPixmap(scaledpixmap);
00224 }
00225
00226 void KNotesApp::resizeEvent ( TQResizeEvent * )
00227 {
00228
00229 resizeTrayIcon();
00230 }
00231
00232 void KNotesApp::showEvent ( TQShowEvent * )
00233 {
00234
00235 resizeTrayIcon();
00236 }
00237
00238 KNotesApp::~KNotesApp()
00239 {
00240 saveNotes();
00241
00242 blockSignals( true );
00243 m_noteList.clear();
00244 blockSignals( false );
00245
00246 delete m_listener;
00247 delete m_manager;
00248 delete m_guiBuilder;
00249 }
00250
00251 bool KNotesApp::commitData( TQSessionManager& )
00252 {
00253 saveConfigs();
00254 return true;
00255 }
00256
00257
00258
00259 TQString KNotesApp::newNote( const TQString& name, const TQString& text )
00260 {
00261
00262 KCal::Journal *journal = new KCal::Journal();
00263
00264
00265 if ( !name.isEmpty() )
00266 journal->setSummary( name );
00267 else
00268 journal->setSummary( TDEGlobal::locale()->formatDateTime( TQDateTime::currentDateTime() ) );
00269
00270
00271 journal->setDescription( text );
00272
00273 if ( m_manager->addNewNote( journal ) ) {
00274 showNote( journal->uid() );
00275 }
00276 return journal->uid();
00277 }
00278
00279 TQString KNotesApp::newNoteFromClipboard( const TQString& name )
00280 {
00281 const TQString& text = TDEApplication::clipboard()->text();
00282 return newNote( name, text );
00283 }
00284
00285 void KNotesApp::hideAllNotes() const
00286 {
00287 TQDictIterator<KNote> it( m_noteList );
00288 for ( ; *it; ++it )
00289 (*it)->close();
00290 }
00291
00292 void KNotesApp::showAllNotes() const
00293 {
00294 TQDictIterator<KNote> it( m_noteList );
00295 for ( ; *it; ++it )
00296 {
00297 (*it)->show();
00298 }
00299 }
00300
00301 void KNotesApp::showNote( const TQString& id ) const
00302 {
00303 KNote* note = m_noteList[id];
00304 if ( note )
00305 showNote( note );
00306 else
00307 kdWarning(5500) << "showNote: no note with id: " << id << endl;
00308 }
00309
00310 void KNotesApp::hideNote( const TQString& id ) const
00311 {
00312 KNote* note = m_noteList[id];
00313 if ( note )
00314 note->hide();
00315 else
00316 kdWarning(5500) << "hideNote: no note with id: " << id << endl;
00317 }
00318
00319 void KNotesApp::killNote( const TQString& id, bool force )
00320 {
00321 KNote* note = m_noteList[id];
00322 if ( note )
00323 note->slotKill( force );
00324 else
00325 kdWarning(5500) << "killNote: no note with id: " << id << endl;
00326 }
00327
00328
00329 void KNotesApp::killNote( const TQString& id )
00330 {
00331 killNote( id, false );
00332 }
00333
00334 TQMap<TQString,TQString> KNotesApp::notes() const
00335 {
00336 TQMap<TQString,TQString> notes;
00337 TQDictIterator<KNote> it( m_noteList );
00338
00339 for ( ; it.current(); ++it )
00340 notes.insert( it.current()->noteId(), it.current()->name() );
00341
00342 return notes;
00343 }
00344
00345 TQString KNotesApp::name( const TQString& id ) const
00346 {
00347 KNote* note = m_noteList[id];
00348 if ( note )
00349 return note->name();
00350 else
00351 return TQString();
00352 }
00353
00354 TQString KNotesApp::text( const TQString& id ) const
00355 {
00356 KNote* note = m_noteList[id];
00357 if ( note )
00358 return note->text();
00359 else
00360 return TQString();
00361 }
00362
00363 void KNotesApp::setName( const TQString& id, const TQString& newName )
00364 {
00365 KNote* note = m_noteList[id];
00366 if ( note )
00367 note->setName( newName );
00368 else
00369 kdWarning(5500) << "setName: no note with id: " << id << endl;
00370 }
00371
00372 void KNotesApp::setText( const TQString& id, const TQString& newText )
00373 {
00374 KNote* note = m_noteList[id];
00375 if ( note )
00376 note->setText( newText );
00377 else
00378 kdWarning(5500) << "setText: no note with id: " << id << endl;
00379 }
00380
00381 TQString KNotesApp::fgColor( const TQString& id ) const
00382 {
00383 KNote* note = m_noteList[id];
00384 if ( note )
00385 return note->fgColor().name();
00386 else
00387 return TQString();
00388 }
00389
00390 TQString KNotesApp::bgColor( const TQString& id ) const
00391 {
00392 KNote* note = m_noteList[id];
00393 if ( note )
00394 return note->bgColor().name();
00395 else
00396 return TQString();
00397 }
00398
00399 void KNotesApp::setColor( const TQString& id, const TQString& fgColor, const TQString& bgColor )
00400 {
00401 KNote* note = m_noteList[id];
00402 if ( note )
00403 note->setColor( TQColor( fgColor ), TQColor( bgColor ) );
00404 else
00405 kdWarning(5500) << "setColor: no note with id: " << id << endl;
00406 }
00407
00408 int KNotesApp::width( const TQString& id ) const
00409 {
00410 KNote* note = m_noteList[id];
00411 if ( note )
00412 return note->width();
00413 else
00414 return 0;
00415 }
00416
00417 int KNotesApp::height( const TQString& id ) const
00418 {
00419 KNote* note = m_noteList[id];
00420 if ( note )
00421 return note->height();
00422 else
00423 return 0;
00424 }
00425
00426 void KNotesApp::move( const TQString& id, int x, int y ) const
00427 {
00428 KNote* note = m_noteList[id];
00429 if ( note )
00430 return note->move( x, y );
00431 else
00432 kdWarning(5500) << "move: no note with id: " << id << endl;
00433 }
00434
00435 void KNotesApp::resize( const TQString& id, int width, int height ) const
00436 {
00437 KNote* note = m_noteList[id];
00438 if ( note )
00439 return note->resize( width, height );
00440 else
00441 kdWarning(5500) << "resize: no note with id: " << id << endl;
00442 }
00443
00444 void KNotesApp::sync( const TQString& app )
00445 {
00446 TQDictIterator<KNote> it( m_noteList );
00447
00448 for ( ; it.current(); ++it )
00449 it.current()->sync( app );
00450 }
00451
00452 bool KNotesApp::isNew( const TQString& app, const TQString& id ) const
00453 {
00454 KNote* note = m_noteList[id];
00455 if ( note )
00456 return note->isNew( app );
00457 else
00458 return false;
00459 }
00460
00461 bool KNotesApp::isModified( const TQString& app, const TQString& id ) const
00462 {
00463 KNote* note = m_noteList[id];
00464 if ( note )
00465 return note->isModified( app );
00466 else
00467 return false;
00468 }
00469
00470
00471
00472
00473 void KNotesApp::mousePressEvent( TQMouseEvent* e )
00474 {
00475 if ( !rect().contains( e->pos() ) )
00476 return;
00477
00478 switch ( e->button() )
00479 {
00480 case Qt::LeftButton:
00481 if ( m_noteList.count() == 1 )
00482 {
00483 TQDictIterator<KNote> it( m_noteList );
00484 showNote( it.toFirst() );
00485 }
00486 else if ( m_note_menu->count() > 0 )
00487 m_note_menu->popup( e->globalPos() );
00488 break;
00489 case Qt::MidButton:
00490 newNote();
00491 break;
00492 case Qt::RightButton:
00493 m_context_menu->popup( e->globalPos() );
00494 default: break;
00495 }
00496 }
00497
00498
00499
00500 void KNotesApp::slotShowNote()
00501 {
00502
00503 showNote( TQString::fromUtf8( TQT_TQOBJECT(const_cast<TQT_BASE_OBJECT_NAME*>(sender()))->name() ) );
00504 }
00505
00506 void KNotesApp::slotWalkThroughNotes()
00507 {
00508
00509 TQDictIterator<KNote> it( m_noteList );
00510 KNote *first = it.toFirst();
00511 for ( ; *it; ++it )
00512 if ( (*it)->hasFocus() )
00513 {
00514 if ( ++it )
00515 showNote( *it );
00516 else
00517 showNote( first );
00518 break;
00519 }
00520 }
00521
00522 void KNotesApp::slotOpenFindDialog()
00523 {
00524 KFindDialog findDia( this, "find_dialog" );
00525 findDia.setHasSelection( false );
00526 findDia.setHasCursor( false );
00527 findDia.setSupportsBackwardsFind( false );
00528
00529 if ( (findDia.exec() != TQDialog::Accepted) || findDia.pattern().isEmpty() )
00530 return;
00531
00532 delete m_findPos;
00533 m_findPos = new TQDictIterator<KNote>( m_noteList );
00534
00535
00536 delete m_find;
00537 m_find = new KFind( findDia.pattern(), findDia.options(), this );
00538
00539 slotFindNext();
00540 }
00541
00542 void KNotesApp::slotFindNext()
00543 {
00544 if ( **m_findPos )
00545 {
00546 KNote *note = **m_findPos;
00547 ++*m_findPos;
00548 note->find( m_find->pattern(), m_find->options() );
00549 }
00550 else
00551 {
00552 m_find->displayFinalDialog();
00553 delete m_find;
00554 m_find = 0;
00555 delete m_findPos;
00556 m_findPos = 0;
00557 }
00558 }
00559
00560 void KNotesApp::slotPreferences()
00561 {
00562
00563 if ( KNoteConfigDlg::showDialog( "KNotes Default Settings" ) )
00564 return;
00565
00566
00567 KNoteConfigDlg *dialog = new KNoteConfigDlg( 0, i18n("Settings"), this,
00568 "KNotes Settings" );
00569 connect( dialog, TQT_SIGNAL(settingsChanged()), TQT_TQOBJECT(this), TQT_SLOT(updateNetworkListener()) );
00570 connect( dialog, TQT_SIGNAL(settingsChanged()), TQT_TQOBJECT(this), TQT_SLOT(updateStyle()) );
00571 dialog->show();
00572 }
00573
00574 void KNotesApp::slotConfigureAccels()
00575 {
00576 KNotesKeyDialog keys( m_globalAccel, this );
00577 TQDictIterator<KNote> notes( m_noteList );
00578 if ( !m_noteList.isEmpty() )
00579 keys.insert( (*notes)->actionCollection() );
00580 keys.configure();
00581
00582 m_globalAccel->writeSettings();
00583 updateGlobalAccels();
00584
00585
00586 m_noteGUI.setContent(
00587 KXMLGUIFactory::readConfigFile( instance()->instanceName() + "ui.rc", instance() )
00588 );
00589
00590 if ( m_noteList.isEmpty() )
00591 return;
00592
00593 notes.toFirst();
00594 TQValueList<TDEAction *> list = (*notes)->actionCollection()->actions();
00595 for ( TQValueList<TDEAction *>::iterator it = list.begin(); it != list.end(); ++it )
00596 {
00597 notes.toFirst();
00598 for ( ++notes; *notes; ++notes )
00599 {
00600 TDEAction *toChange = (*notes)->actionCollection()->action( (*it)->name() );
00601 if ( toChange->shortcut() != (*it)->shortcut() )
00602 toChange->setShortcut( (*it)->shortcut() );
00603 }
00604 }
00605 }
00606
00607 void KNotesApp::slotNoteKilled( KCal::Journal *journal )
00608 {
00609 m_noteUidModify="";
00610 m_manager->deleteNote( journal );
00611 saveNotes();
00612 }
00613
00614 void KNotesApp::slotQuit()
00615 {
00616 TQDictIterator<KNote> it( m_noteList );
00617
00618 for ( ; *it; ++it )
00619 if ( (*it)->isModified() )
00620 (*it)->saveData(false);
00621
00622 saveConfigs();
00623 kapp->quit();
00624 }
00625
00626
00627
00628
00629 void KNotesApp::showNote( KNote* note ) const
00630 {
00631 note->show();
00632 KWin::setCurrentDesktop( KWin::windowInfo( note->winId() ).desktop() );
00633 KWin::forceActiveWindow( note->winId() );
00634 note->setFocus();
00635 }
00636
00637 void KNotesApp::createNote( KCal::Journal *journal )
00638 {
00639 if( journal->uid() == m_noteUidModify)
00640 {
00641 KNote *note = m_noteList[m_noteUidModify];
00642 if ( note )
00643 note->changeJournal(journal);
00644
00645 return;
00646 }
00647 m_noteUidModify = journal->uid();
00648 KNote *newNote = new KNote( m_noteGUI, journal, 0, journal->uid().utf8() );
00649 m_noteList.insert( newNote->noteId(), newNote );
00650
00651 connect( newNote, TQT_SIGNAL(sigRequestNewNote()), TQT_SLOT(newNote()) );
00652 connect( newNote, TQT_SIGNAL(sigShowNextNote()), TQT_SLOT(slotWalkThroughNotes()) );
00653 connect( newNote, TQT_SIGNAL(sigKillNote( KCal::Journal* )),
00654 TQT_SLOT(slotNoteKilled( KCal::Journal* )) );
00655 connect( newNote, TQT_SIGNAL(sigNameChanged()), TQT_SLOT(updateNoteActions()) );
00656 connect( newNote, TQT_SIGNAL(sigDataChanged(const TQString &)), TQT_SLOT(saveNotes(const TQString &)) );
00657 connect( newNote, TQT_SIGNAL(sigColorChanged()), TQT_SLOT(updateNoteActions()) );
00658 connect( newNote, TQT_SIGNAL(sigFindFinished()), TQT_SLOT(slotFindNext()) );
00659
00660
00661 if ( m_alarm )
00662 updateNoteActions();
00663 }
00664
00665 void KNotesApp::killNote( KCal::Journal *journal )
00666 {
00667 if(m_noteUidModify == journal->uid())
00668 {
00669 return;
00670 }
00671
00672 KNote *note = m_noteList.take( journal->uid() );
00673 if ( note )
00674 {
00675 note->deleteWhenIdle();
00676 updateNoteActions();
00677 }
00678 }
00679
00680 void KNotesApp::acceptConnection()
00681 {
00682
00683 TDEBufferedSocket *s = static_cast<TDEBufferedSocket *>(m_listener->accept());
00684 if ( s )
00685 {
00686 KNotesNetworkReceiver *recv = new KNotesNetworkReceiver( s );
00687 connect( recv, TQT_SIGNAL(sigNoteReceived( const TQString &, const TQString & )),
00688 TQT_TQOBJECT(this), TQT_SLOT(newNote( const TQString &, const TQString & )) );
00689 }
00690 }
00691
00692 void KNotesApp::saveNotes( const TQString & uid )
00693 {
00694 m_noteUidModify = uid;
00695 saveNotes();
00696 }
00697
00698 void KNotesApp::saveNotes()
00699 {
00700 KNotesGlobalConfig::writeConfig();
00701 m_manager->save();
00702 }
00703
00704 void KNotesApp::saveConfigs()
00705 {
00706 TQDictIterator<KNote> it( m_noteList );
00707 for ( ; it.current(); ++it )
00708 it.current()->saveConfig();
00709 }
00710
00711 void KNotesApp::updateNoteActions()
00712 {
00713 unplugActionList( "notes" );
00714 m_noteActions.clear();
00715
00716 for ( TQDictIterator<KNote> it( m_noteList ); it.current(); ++it )
00717 {
00718 TDEAction *action = new TDEAction( it.current()->name().replace("&", "&&"),
00719 TDEShortcut(), TQT_TQOBJECT(this), TQT_SLOT(slotShowNote()),
00720 (TQObject *)0,
00721 it.current()->noteId().utf8() );
00722 TDEIconEffect effect;
00723 TQPixmap icon = effect.apply( kapp->miniIcon(), TDEIconEffect::Colorize, 1,
00724 it.current()->paletteBackgroundColor(), false );
00725 action->setIconSet( icon );
00726 m_noteActions.append( action );
00727 }
00728
00729 if ( m_noteActions.isEmpty() )
00730 {
00731 actionCollection()->action( "hide_all_notes" )->setEnabled( false );
00732 actionCollection()->action( "show_all_notes" )->setEnabled( false );
00733 m_findAction->setEnabled( false );
00734 TDEAction *action = new TDEAction( i18n("No Notes") );
00735 m_noteActions.append( action );
00736 }
00737 else
00738 {
00739 actionCollection()->action( "hide_all_notes" )->setEnabled( true );
00740 actionCollection()->action( "show_all_notes" )->setEnabled( true );
00741 m_findAction->setEnabled( true );
00742 m_noteActions.sort();
00743 }
00744 plugActionList( "notes", m_noteActions );
00745 }
00746
00747 void KNotesApp::updateGlobalAccels()
00748 {
00749 if ( m_globalAccel->isEnabled() )
00750 {
00751 TDEAction *action = actionCollection()->action( "new_note" );
00752 if ( action )
00753 action->setShortcut( m_globalAccel->shortcut( "global_new_note" ) );
00754 action = actionCollection()->action( "new_note_clipboard" );
00755 if ( action )
00756 action->setShortcut( m_globalAccel->shortcut( "global_new_note_clipboard" ) );
00757 action = actionCollection()->action( "hide_all_notes" );
00758 if ( action )
00759 action->setShortcut( m_globalAccel->shortcut( "global_hide_all_notes" ) );
00760 action = actionCollection()->action( "show_all_notes" );
00761 if ( action )
00762 action->setShortcut( m_globalAccel->shortcut( "global_show_all_notes" ) );
00763
00764 m_globalAccel->updateConnections();
00765 }
00766 else
00767 {
00768 TDEAction *action = actionCollection()->action( "new_note" );
00769 if ( action )
00770 action->setShortcut( 0 );
00771 action = actionCollection()->action( "new_note_clipboard" );
00772 if ( action )
00773 action->setShortcut( 0 );
00774 action = actionCollection()->action( "hide_all_notes" );
00775 if ( action )
00776 action->setShortcut( 0 );
00777 action = actionCollection()->action( "show_all_notes" );
00778 if ( action )
00779 action->setShortcut( 0 );
00780 }
00781 }
00782
00783 void KNotesApp::updateNetworkListener()
00784 {
00785 m_listener->close();
00786
00787 if ( KNotesGlobalConfig::receiveNotes() )
00788 {
00789 m_listener->setAddress( TQString::number( KNotesGlobalConfig::port() ) );
00790 m_listener->bind();
00791 m_listener->listen();
00792 }
00793 }
00794
00795 void KNotesApp::updateStyle()
00796 {
00797 KNote::setStyle( KNotesGlobalConfig::style() );
00798
00799 TQDictIterator<KNote> it( m_noteList );
00800 for ( ; it.current(); ++it )
00801 TQApplication::postEvent( *it, new TQEvent( TQEvent::LayoutHint ) );
00802 }
00803
00804 #include "knotesapp.moc"