summaryrefslogtreecommitdiffstats
path: root/src/gui/projectdlgs.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/projectdlgs.cpp')
-rw-r--r--src/gui/projectdlgs.cpp275
1 files changed, 275 insertions, 0 deletions
diff --git a/src/gui/projectdlgs.cpp b/src/gui/projectdlgs.cpp
new file mode 100644
index 0000000..4ea18c0
--- /dev/null
+++ b/src/gui/projectdlgs.cpp
@@ -0,0 +1,275 @@
+/***************************************************************************
+ * Copyright (C) 2005 by David Saxton *
+ * *
+ * 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 "createsubprojectwidget.h"
+#include "linkeroptionswidget.h"
+#include "microlibrary.h"
+#include "microselectwidget.h"
+#include "newprojectwidget.h"
+#include "processingoptionswidget.h"
+#include "projectdlgs.h"
+#include "projectmanager.h"
+
+#include <assert.h>
+#include <kcombobox.h>
+#include <kdeversion.h>
+#include <kfiledialog.h>
+#include <klineedit.h>
+#include <klocale.h>
+#include <kurlrequester.h>
+#include <qcheckbox.h>
+#include <qcombobox.h>
+#include <qlabel.h>
+#include <qlayout.h>
+
+//BEGIN class NewProjectDlg
+NewProjectDlg::NewProjectDlg( QWidget * parent )
+ : KDialogBase( parent, "newprojectdlg", true, "New Project", KDialogBase::Ok|KDialogBase::Cancel, KDialogBase::Ok, true )
+{
+ m_pWidget = new NewProjectWidget(this);
+ connect( m_pWidget->projectNameEdit, SIGNAL(textChanged(const QString & )), this, SLOT(locationChanged(const QString& )) );
+ connect( m_pWidget->projectLocationURL, SIGNAL(textChanged(const QString & )), this, SLOT(locationChanged(const QString& )) );
+
+ // Check if already valid dir
+ locationChanged( QString::null );
+
+ m_pWidget->projectLocationURL->setURL( QDir::homeDirPath() );
+ m_pWidget->projectLocationURL->setMode( KFile::Directory );
+
+ setMainWidget( m_pWidget );
+ setInitialSize( m_pWidget->rect().size() );
+}
+
+void NewProjectDlg::accept()
+{
+ hide();
+
+ m_bAccepted = true;
+
+ m_projectName = m_pWidget->projectNameEdit->text();
+ m_projectLocation = m_pWidget->projectLocationURL->url();
+}
+
+void NewProjectDlg::reject()
+{
+ m_bAccepted = false;
+}
+
+void NewProjectDlg::locationChanged( const QString & )
+{
+ m_location = m_pWidget->projectLocationURL->url();
+ QDir subDir(m_location);
+
+ if ( !m_location.endsWith("/") )
+ m_location.append("/");
+
+ if ( !m_pWidget->projectNameEdit->text().isEmpty() )
+ m_location.append( m_pWidget->projectNameEdit->text().lower() + "/" );
+
+ m_pWidget->locationLabel->setText( m_location );
+
+ QDir dir(m_location);
+
+ if ( dir.exists() || !subDir.exists() )
+ enableButtonOK(false);
+
+ else
+ enableButtonOK(true);
+}
+//END class NewProjectDlg
+
+
+
+//BEGIN class CreateSubprojectDlg
+CreateSubprojectDlg::CreateSubprojectDlg( QWidget * parent )
+ : KDialogBase( parent, "Create Subproject Dialog", true, "Create Subproject", KDialogBase::Ok|KDialogBase::Cancel, KDialogBase::Ok, true )
+{
+ m_pWidget = new CreateSubprojectWidget(this);
+
+ if ( ProjectManager::self()->currentProject() )
+ m_pWidget->m_targetFile->setURL( ProjectManager::self()->currentProject()->directory() );
+
+ m_type = ProgramType;
+
+ setMainWidget( m_pWidget );
+ setInitialSize( m_pWidget->rect().size() );
+}
+
+
+CreateSubprojectDlg::~CreateSubprojectDlg()
+{
+}
+
+
+void CreateSubprojectDlg::accept()
+{
+ hide();
+
+ m_bAccepted = true;
+
+ m_targetFile = m_pWidget->m_targetFile->url();
+ m_type = (Type)m_pWidget->m_typeCombo->currentItem();
+}
+
+
+void CreateSubprojectDlg::reject()
+{
+ m_bAccepted = false;
+}
+//END class CreateSubprojectDlg
+
+
+
+//BEGIN class LinkerOptionsDlg
+LinkerOptionsDlg::LinkerOptionsDlg( LinkerOptions * linkingOptions, QWidget *parent )
+ : KDialogBase( parent, "Linker Options Dialog", true, "Linker Options", KDialogBase::Ok|KDialogBase::Cancel, KDialogBase::Ok, true )
+{
+ m_pLinkerOptions = linkingOptions;
+ m_pWidget = new LinkerOptionsWidget(this);
+
+ ProjectInfo * pi = ProjectManager::self()->currentProject();
+ assert(pi);
+
+
+ //BEGIN Update gplink options
+ m_pWidget->m_pHexFormat->setCurrentItem( m_pLinkerOptions->hexFormat() );
+ m_pWidget->m_pOutputMap->setChecked( m_pLinkerOptions->outputMapFile() );
+ m_pWidget->m_pLibraryDir->setText( m_pLinkerOptions->libraryDir() );
+ m_pWidget->m_pLinkerScript->setText( m_pLinkerOptions->linkerScript() );
+ m_pWidget->m_pOther->setText( m_pLinkerOptions->linkerOther() );
+ //END Update gplink options
+
+
+
+ //BEGIN Update library widgets
+ const KURL::List availableInternal = pi->childOutputURLs( ProjectItem::LibraryType );
+ const QStringList linkedInternal = m_pLinkerOptions->linkedInternal();
+
+ KURL::List::const_iterator end = availableInternal.end();
+ for ( KURL::List::const_iterator it = availableInternal.begin(); it != end; ++it )
+ {
+ QString relativeURL = KURL::relativeURL( pi->url(), *it );
+ QCheckListItem * item = new QCheckListItem( m_pWidget->m_pInternalLibraries, relativeURL, QCheckListItem::CheckBox );
+ item->setOn( linkedInternal.contains(relativeURL) );
+ }
+
+ m_pExternalLibraryRequester = new KURLRequester( 0l );
+ m_pExternalLibraryRequester->fileDialog()->setURL( "/usr/share/sdcc/lib" );
+
+ delete m_pWidget->m_pExternalLibraries;
+ m_pWidget->m_pExternalLibraries = new KEditListBox( i18n("Link libraries outside project"), m_pExternalLibraryRequester->customEditor(), m_pWidget );
+ m_pWidget->m_pExternalLibraries->layout()->setMargin(11);
+ (dynamic_cast<QGridLayout*>(m_pWidget->layout()))->addMultiCellWidget( m_pWidget->m_pExternalLibraries, 7, 7, 0, 1 );
+
+#if defined(KDE_MAKE_VERSION)
+# if KDE_VERSION >= KDE_MAKE_VERSION(3,4,0)
+ m_pWidget->m_pExternalLibraries->setButtons( KEditListBox::Add | KEditListBox::Remove );
+# endif
+#endif
+ m_pWidget->m_pExternalLibraries->insertStringList( m_pLinkerOptions->linkedExternal() );
+ //END Update library widgets
+
+
+ setMainWidget( m_pWidget );
+ setInitialSize( m_pWidget->rect().size() );
+}
+
+
+LinkerOptionsDlg::~LinkerOptionsDlg()
+{
+ delete m_pExternalLibraryRequester;
+}
+
+
+void LinkerOptionsDlg::accept()
+{
+ hide();
+
+ QStringList linkedInternal;
+ for ( QListViewItemIterator internalIt( m_pWidget->m_pInternalLibraries ); internalIt.current(); ++internalIt )
+ {
+ QCheckListItem * item = static_cast<QCheckListItem*>(internalIt.current());
+ if ( item->isOn() )
+ linkedInternal << item->text();
+ }
+ m_pLinkerOptions->setLinkedInternal( linkedInternal );
+
+ m_pLinkerOptions->setLinkedExternal( m_pWidget->m_pExternalLibraries->items() );
+ m_pLinkerOptions->setHexFormat( (LinkerOptions::HexFormat::type) m_pWidget->m_pHexFormat->currentItem() );
+ m_pLinkerOptions->setOutputMapFile( m_pWidget->m_pOutputMap->isChecked() );
+ m_pLinkerOptions->setLibraryDir( m_pWidget->m_pLibraryDir->text() );
+ m_pLinkerOptions->setLinkerScript( m_pWidget->m_pLinkerScript->text() );
+ m_pLinkerOptions->setLinkerOther( m_pWidget->m_pOther->text() );
+}
+
+
+void LinkerOptionsDlg::reject()
+{
+}
+//END class LinkerOptionsDlg
+
+
+
+//BEGIN class ProcessingOptionsDlg
+ProcessingOptionsDlg::ProcessingOptionsDlg( ProjectItem * projectItem, QWidget *parent )
+ : KDialogBase( parent, "Processing Options Dialog", true, "Processing Options", KDialogBase::Ok|KDialogBase::Cancel, KDialogBase::Ok, true )
+{
+ m_pProjectItem = projectItem;
+ m_pWidget = new ProcessingOptionsWidget(this);
+
+ m_pWidget->m_pMicroSelect->setEnabled( !projectItem->useParentMicroID() );
+
+ switch ( projectItem->type() )
+ {
+ case ProjectItem::ProjectType:
+ m_pWidget->m_pOutputURL->setEnabled(false);
+ break;
+
+ case ProjectItem::FileType:
+ m_pWidget->m_pOutputURL->setEnabled(true);
+ break;
+
+ case ProjectItem::ProgramType:
+ case ProjectItem::LibraryType:
+ m_pWidget->m_pOutputURL->setEnabled(false);
+ break;
+ }
+
+ m_pWidget->m_pOutputURL->setURL( projectItem->outputURL().path() );
+ m_pWidget->m_pMicroSelect->setMicro( projectItem->microID() );
+
+ setMainWidget( m_pWidget );
+ setInitialSize( m_pWidget->rect().size() );
+}
+
+
+ProcessingOptionsDlg::~ProcessingOptionsDlg()
+{
+}
+
+
+void ProcessingOptionsDlg::accept()
+{
+ hide();
+
+ if ( m_pWidget->m_pOutputURL->isEnabled() )
+ m_pProjectItem->setOutputURL( m_pWidget->m_pOutputURL->url() );
+
+ if ( m_pWidget->m_pMicroSelect->isEnabled() )
+ m_pProjectItem->setMicroID( m_pWidget->m_pMicroSelect->micro() );
+}
+
+
+void ProcessingOptionsDlg::reject()
+{
+}
+//END class ProcessingOptionsDlg
+
+