/*************************************************************************** kcoloredit.cpp - description ------------------- begin : Sat Jul 8 09:57:28 CEST 2000 copyright : (C) 2000 by Artur Rataj email : art@zeus.polsl.gliwice.pl ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ // include files for QT #include #include #include // include files for KDE #include #include #include #include #include #include #include #include // application specific includes #include "kcoloredit.h" #include "kcoloreditview.h" #include "kcoloreditdoc.h" #include "loadpalettedlg.h" #include "resource.h" #include #include KColorEditApp::KColorEditApp() : KMainWindow(0) { config=kapp->config(); /////////////////////////////////////////////////////////////////// // call inits to invoke all other construction parts initActions(); initStatusBar(); initDocument(); initView(); resize(606,400); setupGUI(); readOptions(); gettingColorFromScreen = false; } KColorEditApp::~KColorEditApp() { } void KColorEditApp::initActions() { // File actiojns KStdAction::openNew( this, TQT_SLOT( slotFileNew() ), actionCollection() ); KStdAction::open( this, TQT_SLOT( slotFileOpen() ), actionCollection() ); KStdAction::saveAs( this, TQT_SLOT( slotFileSaveAs() ), actionCollection() ); KStdAction::close( this, TQT_SLOT( slotClose() ), actionCollection() ); KStdAction::quit( this, TQT_SLOT( slotQuit() ), actionCollection() ); m_actSave = KStdAction::save( this, TQT_SLOT( slotFileSave() ), actionCollection() ); m_actRecent = KStdAction::openRecent( this, TQT_SLOT( slotFileOpenRecent( const KURL& ) ), actionCollection() ); ( void ) new KAction( i18n("New &Window"), kapp->miniIcon(), KShortcut(), this, TQT_SLOT( slotFileNewWindow() ), actionCollection(), "file_new_window" ); // Edit actions m_actCut = KStdAction::cut( this, TQT_SLOT( slotEditCut() ), actionCollection() ); m_actCopy = KStdAction::copy( this, TQT_SLOT( slotEditCopy() ), actionCollection() ); m_actPaste = KStdAction::paste( this, TQT_SLOT( slotEditPaste() ), actionCollection() ); m_actPaste->setEnabled( false ); // Color Menu m_actNames = new KToggleAction( i18n("Show &Color Names"), KShortcut(), this, TQT_SLOT( slotViewColorNames() ), actionCollection(), "color_view_names" ); m_actNames->setCheckedState(i18n("Hide &Color Names")); m_actPalette = new KAction( i18n("From &Palette"), KShortcut(), this, TQT_SLOT( slotColorFromPalette() ), actionCollection(), "color_from_palette" ); ( void ) new KAction( i18n("From &Screen"), KShortcut(), this, TQT_SLOT( slotColorFromScreen() ), actionCollection(), "color_from_screen" ); } void KColorEditApp::initStatusBar() { statusBar()->insertItem(i18n("Ready."), ID_STATUS_MSG, 1); statusBar()->setItemAlignment( ID_STATUS_MSG, Qt::AlignLeft ); } void KColorEditApp::initDocument() { doc = new KColorEditDoc(this); doc->newDocument(); connect( doc, TQT_SIGNAL( selectionChanged( int, int ) ), TQT_SLOT( slotSelectionChanged( int, int ) ) ); connect( doc, TQT_SIGNAL( clipboardChanged() ), TQT_SLOT( slotClipboardChanged() ) ); connect( doc, TQT_SIGNAL( modified( bool ) ), TQT_SLOT( slotModified( bool ) ) ); connect( doc, TQT_SIGNAL( paletteAvailable( bool ) ), TQT_SLOT( slotPaletteAvailable( bool ) ) ); } void KColorEditApp::initView() { //////////////////////////////////////////////////////////////////// // create the main widget here that is managed by KMainWindow's view-region // and connect the widget to your document to display document contents. view = new KColorEditView(this); doc->addView(view); setCentralWidget(view); setCaption(doc->title()); } void KColorEditApp::openDocumentFile(const char* _cmdl) { doc->openDocument(_cmdl); } KColorEditDoc *KColorEditApp::document() const { return doc; } void KColorEditApp::saveOptions() { saveMainWindowSettings( config, "MainWindowSettings" ); m_actRecent->saveEntries( config ); config->setGroup("KColorEdit Options"); config->writeEntry("ColorNames", viewColorNames); } void KColorEditApp::readOptions() { applyMainWindowSettings( config, "MainWindowSettings" ); m_actRecent->loadEntries( config ); config->setGroup("KColorEdit Options"); viewColorNames = config->readBoolEntry("ColorNames", false); m_actNames->setChecked(viewColorNames); doc->slotChangeViewMode(viewColorNames); } bool KColorEditApp::queryClose() { return doc->saveModified(); } bool KColorEditApp::queryExit() { saveOptions(); return true; } ///////////////////////////////////////////////////////////////////// // TQT_SLOT IMPLEMENTATION ///////////////////////////////////////////////////////////////////// void KColorEditApp::slotSelectionChanged( int begin, int end ) { m_actCut->setEnabled( begin != end ); m_actCopy->setEnabled( begin != end ); } void KColorEditApp::slotClipboardChanged() { m_actPaste->setEnabled( true ); } void KColorEditApp::slotModified( bool b ) { m_actSave->setEnabled( b ); } void KColorEditApp::slotPaletteAvailable( bool b ) { m_actPalette->setEnabled( b ); } void KColorEditApp::slotFileNewWindow() { KColorEditApp *new_window= new KColorEditApp(); new_window->show(); } void KColorEditApp::slotFileNew() { if(doc->saveModified()) { doc->newDocument(); setCaption(doc->title()); } } void KColorEditApp::slotFileOpen() { if(doc->saveModified()) { LoadPaletteDlg dialog(this); if(dialog.exec()) { TQString fileToOpen = dialog.getFileName(); if(!fileToOpen.isEmpty()) { if(!doc->openDocument( fileToOpen )) { KMessageBox::sorry(0, doc->errorString()); } else { setCaption(doc->title()); m_actRecent->addURL( KURL::fromPathOrURL( fileToOpen ) ); } } } } } void KColorEditApp::slotFileOpenRecent( const KURL & url ) { if(doc->saveModified()) { doc->openDocument( url.path() ); setCaption(doc->title()); } } void KColorEditApp::slotFileSave() { if(!doc->saveDocument( doc->absFilePath() )) slotFileSaveAs(); //KMessageBox::sorry(0, doc->getErrorString()); } bool KColorEditApp::slotFileSaveAs() { bool result = true; while(result) { TQString newName=KFileDialog::getSaveFileName(lastSavePaletteAsFileDir, "*|" + i18n("All Files"), this, i18n("Save As")); if(newName.isEmpty()) result = false; else { TQFileInfo saveAsInfo(newName); if(!saveAsInfo.exists() || KMessageBox::questionYesNo( this, i18n("A Document with this name already exists.\n" "Do you want to overwrite it?"), i18n("Warning"), i18n("Overwrite"), KStdGuiItem::cancel() ) == KMessageBox::Yes) { if(!doc->saveDocument( newName )) { KMessageBox::sorry(0, doc->errorString()); result = false; } else { doc->setTitle(saveAsInfo.fileName()); doc->setAbsFilePath(saveAsInfo.absFilePath()); setCaption(doc->title()); lastSavePaletteAsFileDir = saveAsInfo.absFilePath(); m_actRecent->addURL( KURL( newName ) ); break; } } } } return result; } void KColorEditApp::slotClose() { close(); } void KColorEditApp::slotFilePrint() { TQPrinter printer; if (printer.setup(this)) { view->print(&printer); } } void KColorEditApp::slotQuit() { saveOptions(); // close the first window, the list makes the next one the first again. // This ensures that queryClose() is called on each window to ask for closing KMainWindow* w; if(memberList) { for(w=memberList->first(); w!=0; w=memberList->next()) { // only close the window if the closeEvent is accepted. If the user presses Cancel on the saveModified() dialog, // the window and the application stay open. if(!w->close()) break; } } } void KColorEditApp::slotEditCut() { doc->cut(); } void KColorEditApp::slotEditCopy() { doc->copy(); } void KColorEditApp::slotEditPaste() { doc->paste(); } void KColorEditApp::slotColorFromPalette() { view->chooseColor(doc->paletteHistory()->editableStream()-> color( doc->paletteCursorPos() )); } void KColorEditApp::slotColorFromScreen() { gettingColorFromScreen = true; grabMouse(crossCursor); grabKeyboard(); } void KColorEditApp::slotViewColorNames() { viewColorNames = m_actNames->isChecked(); doc->slotChangeViewMode(viewColorNames); } void KColorEditApp::mouseReleaseEvent(TQMouseEvent* event) { if(gettingColorFromScreen) { gettingColorFromScreen = false; releaseMouse(); releaseKeyboard(); TQColor rgbColor = KColorDialog::grabColor(event->globalPos()); color.setComponents(rgbColor.red(), rgbColor.green(), rgbColor.blue()); view->chooseColor(&color); } else KMainWindow::mouseReleaseEvent(event); } #include "kcoloredit.moc"