newfiledlg.cpp

00001 /***************************************************************************
00002  *   Copyright (C) 2003-2005 by David Saxton                               *
00003  *   david@bluehaze.org                                                    *
00004  *                                                                         *
00005  *   This program is free software; you can redistribute it and/or modify  *
00006  *   it under the terms of the GNU General Public License as published by  *
00007  *   the Free Software Foundation; either version 2 of the License, or     *
00008  *   (at your option) any later version.                                   *
00009  ***************************************************************************/
00010 
00011 #include "config.h"
00012 #include "document.h"
00013 #include "microinfo.h"
00014 #include "newfiledlg.h"
00015 #include "newfilewidget.h"
00016 #include "microlibrary.h"
00017 #include "microselectwidget.h"
00018 #include "projectmanager.h"
00019 #include "textdocument.h"
00020 
00021 #include <kcombobox.h>
00022 #include <kdebug.h>
00023 #include <klineedit.h>
00024 #include <kiconview.h>
00025 #include <klocale.h>
00026 #include <kiconloader.h>
00027 
00028 #include <qcanvas.h>
00029 #include <qcheckbox.h>
00030 #include <qdir.h>
00031 #include <qfile.h>
00032 #include <qlabel.h>
00033 #include <qpaintdevicemetrics.h>
00034 
00035 
00036 NewFileDlg::NewFileDlg( QWidget *parent )
00037     : KDialogBase( parent, "newfiledlg", true, "New File", KDialogBase::Ok|KDialogBase::Cancel, KDialogBase::Ok, true )
00038 {
00039         m_pMainParent = parent;
00040     m_bAccepted = false;
00041     m_pNewFileWidget = new NewFileWidget(this);
00042 
00043          m_pNewFileWidget->typeIconView->setSelectionMode(QIconView::Single);
00044          m_pNewFileWidget->typeIconView->setMode(KIconView::Select);
00045     
00046         KIconLoader *loader = KGlobal::iconLoader();
00047         
00048         QValueList<QIconViewItem*> items;
00049         
00050         items << new QIconViewItem(m_pNewFileWidget->typeIconView,"Assembly Code (.asm)", loader->loadIcon( "source", KIcon::NoGroup, KIcon::SizeHuge ) );
00051         items << new QIconViewItem(m_pNewFileWidget->typeIconView,"C (.c)", loader->loadIcon( "source_c", KIcon::NoGroup, KIcon::SizeHuge ) );
00052         items << new QIconViewItem(m_pNewFileWidget->typeIconView,"Circuit (.circuit)", loader->loadIcon( "ktechlab_circuit", KIcon::NoGroup, KIcon::SizeHuge ) );
00053         items << new QIconViewItem(m_pNewFileWidget->typeIconView,"FlowCode (.flowcode)", loader->loadIcon( "ktechlab_flowcode", KIcon::NoGroup, KIcon::SizeHuge ) );
00054 #ifdef MECHANICS
00055         items << new QIconViewItem(m_pNewFileWidget->typeIconView,"Mechanics (.mechanics)", loader->loadIcon( "exec", KIcon::NoGroup, KIcon::SizeHuge ) );
00056 #endif
00057         items << new QIconViewItem(m_pNewFileWidget->typeIconView,"Microbe (.microbe)", loader->loadIcon( "ktechlab_microbe", KIcon::NoGroup, KIcon::SizeHuge ) );
00058         
00059         unsigned minWidth = 20 + m_pNewFileWidget->typeIconView->spacing() * items.size();
00060         int minHeight = 0;
00061         
00062         const QValueList<QIconViewItem*>::iterator end = items.end();
00063         for ( QValueList<QIconViewItem*>::iterator it = items.begin(); it != end; ++it )
00064         {
00065                 (*it)->setDragEnabled(false);
00066                 minWidth += (*it)->width();
00067                 minHeight = QMAX( minHeight, (*it)->height()+20 );
00068         }
00069         
00070         m_pNewFileWidget->typeIconView->setMinimumSize( minWidth, minHeight );
00071         m_pNewFileWidget->typeIconView->setCurrentItem(items[3]);
00072         m_pNewFileWidget->addToProjectCheck->setChecked( ProjectManager::self()->currentProject() );
00073         m_pNewFileWidget->addToProjectCheck->setEnabled( ProjectManager::self()->currentProject() );
00074         microSelectWidget()->setAllowedFlowCodeSupport( MicroInfo::FullSupport | MicroInfo::PartialSupport );
00075     
00076         setMainWidget(m_pNewFileWidget);
00077     
00078         // Our behaviour is to have single click selects and double click accepts the dialog
00079         connect( m_pNewFileWidget->typeIconView, SIGNAL(selectionChanged(QIconViewItem*)), this, SLOT(fileTypeChanged(QIconViewItem*)) );
00080         connect( m_pNewFileWidget->typeIconView, SIGNAL(doubleClicked(QIconViewItem*)), this, SLOT(accept()));
00081 
00082     setAcceptDrops(true);
00083 
00084         m_pNewFileWidget->typeIconView->adjustSize();
00085         m_pNewFileWidget->adjustSize();
00086         adjustSize();
00087 }
00088 
00089 void NewFileDlg::accept()
00090 {
00091         hide();
00092         m_bAccepted = true;
00093         
00094         const QString fileText = m_pNewFileWidget->typeIconView->currentItem()->text();
00095         
00096         if              ( fileText.contains(".flowcode") )
00097                 m_fileType = Document::dt_flowcode;
00098         
00099         else if ( fileText.contains(".circuit") )
00100                 m_fileType = Document::dt_circuit;
00101         
00102         else if ( fileText.contains(".mechanics") )
00103                 m_fileType = Document::dt_mechanics;
00104         
00105         else if ( fileText.contains(".asm") )
00106         {
00107                 m_fileType = Document::dt_text;
00108                 m_codeType = TextDocument::ct_asm;
00109         }
00110         
00111         else if ( fileText.contains(".basic") || fileText.contains(".microbe") )
00112         {
00113                 m_fileType = Document::dt_text;
00114                 m_codeType = TextDocument::ct_microbe;
00115         }
00116         
00117         else if (fileText.contains(".c") )
00118         {
00119                 m_fileType = Document::dt_text;
00120                 m_codeType = TextDocument::ct_c;
00121         }
00122         
00123         else
00124                 m_fileType = Document::dt_text;
00125 
00126         m_bAddToProject = m_pNewFileWidget->addToProjectCheck->isChecked();
00127         
00128         m_microID = m_pNewFileWidget->m_pMicroSelect->micro();
00129 }
00130 
00131 
00132 void NewFileDlg::reject()
00133 {
00134     m_bAccepted = false;
00135 }
00136 
00137 
00138 void NewFileDlg::fileTypeChanged( QIconViewItem *item )
00139 {
00140         m_pNewFileWidget->m_pMicroSelect->setEnabled(
00141                         item->text().contains(".flowcode") );
00142 }
00143 
00144 
00145 MicroSelectWidget * NewFileDlg::microSelectWidget() const
00146 {
00147         return m_pNewFileWidget->m_pMicroSelect;
00148 }
00149 
00150 
00151 #include "newfiledlg.moc"

Generated on Tue May 8 17:05:31 2007 for KTechLab by  doxygen 1.5.1