⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 customwidgeteditorimpl.cpp

📁 Linux下的基于X11的图形开发环境。
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/************************************************************************ Copyright (C) 2000 Trolltech AS.  All rights reserved.**** This file is part of Qt Designer.**** This file may be distributed and/or modified under the terms of the** GNU General Public License version 2 as published by the Free Software** Foundation and appearing in the file LICENSE.GPL included in the** packaging of this file.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.**** See http://www.trolltech.com/gpl/ for GPL licensing information.**** Contact info@trolltech.com if any conditions of this licensing are** not clear to you.************************************************************************/#include "customwidgeteditorimpl.h"#include "defs.h"#include "pixmapchooser.h"#include "mainwindow.h"#include "asciivalidator.h"#include "resource.h"#include "widgetfactory.h"#include "widgetdatabase.h"#include <qlistbox.h>#include <qpushbutton.h>#include <qlineedit.h>#include <qcombobox.h>#include <qspinbox.h>#include <qlabel.h>#include <qmessagebox.h>#include <qfiledialog.h>#include <qmessagebox.h>#include <qtimer.h>#include <qapplication.h>#include <qlistview.h>#include <qfile.h>#include <qtextstream.h>#include <qdom.h>#include <qtextcodec.h>#include <qcheckbox.h>CustomWidgetEditor::CustomWidgetEditor( QWidget *parent, MainWindow *mw )    : CustomWidgetEditorBase( parent, 0, TRUE ), mainWindow( mw ){    connect( helpButton, SIGNAL( clicked() ), MainWindow::self, SLOT( showDialogHelp() ) );    checkTimer = new QTimer( this );    connect( checkTimer, SIGNAL( timeout() ),	     this, SLOT( checkWidgetName() ) );    editClass->setEnabled( FALSE );    editHeader->setEnabled( FALSE );    buttonChooseHeader->setEnabled( FALSE );    buttonChoosePixmap->setEnabled( FALSE );    spinWidth->setEnabled( FALSE );    spinHeight->setEnabled( FALSE );    sizeHor->setEnabled( FALSE );    sizeVer->setEnabled( FALSE );    checkContainer->setEnabled( FALSE );    localGlobalCombo->setEnabled( FALSE );    editClass->setValidator( new AsciiValidator( QString(":"), editClass ) );    editSignal->setValidator( new AsciiValidator( TRUE, editSignal ) );    editSlot->setValidator( new AsciiValidator( TRUE, editSignal ) );    editProperty->setValidator( new AsciiValidator( editSignal ) );    editSignal->setEnabled( FALSE );    buttonRemoveSignal->setEnabled( FALSE );    setupDefinition();    setupSignals();    setupSlots();    setupProperties();}void CustomWidgetEditor::setupDefinition(){    QPtrList<MetaDataBase::CustomWidget> *lst = MetaDataBase::customWidgets();    for ( MetaDataBase::CustomWidget *w = lst->first(); w; w = lst->next() ) {	QListBoxItem *i;	if ( w->pixmap )	    i = new QListBoxPixmap( boxWidgets, *w->pixmap, w->className );	else	    i = new QListBoxText( boxWidgets, w->className );	customWidgets.insert( i, w );    }    if ( boxWidgets->firstItem() ) {	boxWidgets->setCurrentItem( boxWidgets->firstItem() );	boxWidgets->setSelected( boxWidgets->firstItem(), TRUE );    }    oldItem = 0;}void CustomWidgetEditor::setupSignals(){    editSignal->setEnabled( FALSE );    buttonRemoveSignal->setEnabled( FALSE );    MetaDataBase::CustomWidget *w = findWidget( boxWidgets->item( boxWidgets->currentItem() ) );    if ( !w )	return;    listSignals->clear();    for ( QValueList<QCString>::Iterator it = w->lstSignals.begin(); it != w->lstSignals.end(); ++it )	listSignals->insertItem( QString( *it ) );    if ( listSignals->firstItem() ) {	listSignals->setCurrentItem( listSignals->firstItem() );	listSignals->setSelected( listSignals->firstItem(), TRUE );    }}void CustomWidgetEditor::setupSlots(){    editSlot->setEnabled( FALSE );    comboAccess->setEnabled( FALSE );    buttonRemoveSlot->setEnabled( FALSE );    MetaDataBase::CustomWidget *w = findWidget( boxWidgets->item( boxWidgets->currentItem() ) );    if ( !w )	return;    listSlots->clear();    for ( QValueList<MetaDataBase::Function>::Iterator it = w->lstSlots.begin(); it != w->lstSlots.end(); ++it )	(void)new QListViewItem( listSlots, (*it).function, (*it).access );    if ( listSlots->firstChild() ) {	listSlots->setCurrentItem( listSlots->firstChild() );	listSlots->setSelected( listSlots->firstChild(), TRUE );    }}void CustomWidgetEditor::setupProperties(){    editProperty->setEnabled( FALSE );    comboType->setEnabled( FALSE );    buttonRemoveProperty->setEnabled( FALSE );    MetaDataBase::CustomWidget *w = findWidget( boxWidgets->item( boxWidgets->currentItem() ) );    if ( !w )	return;    listProperties->clear();    for ( QValueList<MetaDataBase::Property>::Iterator it = w->lstProperties.begin(); it != w->lstProperties.end(); ++it )	(void)new QListViewItem( listProperties, (*it).property, (*it).type );    if ( listProperties->firstChild() ) {	listProperties->setCurrentItem( listProperties->firstChild() );	listProperties->setSelected( listProperties->firstChild(), TRUE );    }}void CustomWidgetEditor::currentWidgetChanged( QListBoxItem *i ){    checkTimer->stop();    checkWidgetName();    MetaDataBase::CustomWidget *w = findWidget( i );    if ( !i || !w ) {	buttonChooseHeader->setEnabled( FALSE );	editClass->setEnabled( FALSE );	editHeader->setEnabled( FALSE );	buttonChoosePixmap->setEnabled( FALSE );	spinWidth->setEnabled( FALSE );	spinHeight->setEnabled( FALSE );	localGlobalCombo->setEnabled( FALSE );	sizeHor->setEnabled( FALSE );	sizeVer->setEnabled( FALSE );	checkContainer->setEnabled( FALSE );	return;    }    buttonChooseHeader->setEnabled( TRUE );    editClass->setEnabled( TRUE );    editHeader->setEnabled( TRUE );    buttonChoosePixmap->setEnabled( TRUE );    spinWidth->setEnabled( TRUE );    spinHeight->setEnabled( TRUE );    localGlobalCombo->setEnabled( TRUE );    sizeHor->setEnabled( TRUE );    sizeVer->setEnabled( TRUE );    checkContainer->setEnabled( TRUE );    editClass->blockSignals( TRUE );    editClass->setText( w->className );    editClass->blockSignals( FALSE );    editHeader->setText( w->includeFile );    localGlobalCombo->setCurrentItem( (int)w->includePolicy );    if ( w->pixmap )	previewPixmap->setPixmap( *w->pixmap );    else	previewPixmap->setText( "" );    spinWidth->setValue( w->sizeHint.width() );    spinHeight->setValue( w->sizeHint.height() );    sizeHor->setCurrentItem( size_type_to_int( w->sizePolicy.horData() ) );    sizeVer->setCurrentItem( size_type_to_int( w->sizePolicy.verData() ) );    checkContainer->setChecked( w->isContainer );    setupSignals();    setupSlots();    setupProperties();}void CustomWidgetEditor::addWidgetClicked(){    oldItem = 0;    checkTimer->stop();    checkWidgetName();    MetaDataBase::CustomWidget *w = new MetaDataBase::CustomWidget;    QString s = w->className;    if ( !MetaDataBase::addCustomWidget( w ) ) {	QMessageBox::information( this, tr( "Adding a Custom Widget" ),				  tr( "Custom widget names must be unique.\n"				      "A custom widget called '%1' already exists, so it is not possible "				      "to add another widget with this name." ).arg( s ) );	return;    }    QListBoxPixmap *i = new QListBoxPixmap( boxWidgets, *w->pixmap, w->className );    customWidgets.insert( i, w );    boxWidgets->setCurrentItem( i );    boxWidgets->setSelected( i, TRUE );}void CustomWidgetEditor::classNameChanged( const QString &s ){    QListBoxItem *i = boxWidgets->item( boxWidgets->currentItem() );    MetaDataBase::CustomWidget *w = findWidget( i );    if ( !i || !w )	return;    WidgetDatabase::customWidgetClassNameChanged( w->className, s );    checkTimer->stop();    boxWidgets->blockSignals( TRUE );    oldName = w->className;    w->className = s;    QListBoxItem *old = i;    if ( w->pixmap )	boxWidgets->changeItem( *w->pixmap, s, boxWidgets->currentItem() );    else	boxWidgets->changeItem( s, boxWidgets->currentItem() );    i = boxWidgets->item( boxWidgets->currentItem() );    oldItem = i;    customWidgets.insert( i, w );    customWidgets.remove( old );    boxWidgets->blockSignals( FALSE );    checkTimer->start( 1000, TRUE );}void CustomWidgetEditor::deleteWidgetClicked(){    oldItem = 0;    checkTimer->stop();    checkWidgetName();    QListBoxItem *i = boxWidgets->item( boxWidgets->currentItem() );    MetaDataBase::CustomWidget *w = findWidget( i );    if ( mainWindow->isCustomWidgetUsed( w ) ) {	QMessageBox::information( mainWindow, tr( "Removing Custom Widget" ),				  tr( "The custom widget '%1' is in use, so it cannot be removed." ).				  arg( w->className ) );	return;    }    if ( !i || !w )	return;    MetaDataBase::removeCustomWidget( w );    customWidgets.remove( i );    delete i;    i = boxWidgets->item( boxWidgets->currentItem() );    if ( i ) {	boxWidgets->setCurrentItem( i );	boxWidgets->setSelected( i, TRUE );    }}void CustomWidgetEditor::headerFileChanged( const QString &s ){    QListBoxItem *i = boxWidgets->item( boxWidgets->currentItem() );    MetaDataBase::CustomWidget *w = findWidget( i );    if ( !i || !w )	return;    w->includeFile = s;}void CustomWidgetEditor::heightChanged( int h ){    QListBoxItem *i = boxWidgets->item( boxWidgets->currentItem() );    MetaDataBase::CustomWidget *w = findWidget( i );    if ( !i || !w )	return;    w->sizeHint.setHeight( h );    updateCustomWidgetSizes();}void CustomWidgetEditor::includePolicyChanged( int p ){    QListBoxItem *i = boxWidgets->item( boxWidgets->currentItem() );    MetaDataBase::CustomWidget *w = findWidget( i );    if ( !i || !w )	return;    w->includePolicy = (MetaDataBase::CustomWidget::IncludePolicy)p;}void CustomWidgetEditor::pixmapChoosen(){    QListBoxItem *i = boxWidgets->item( boxWidgets->currentItem() );    MetaDataBase::CustomWidget *w = findWidget( i );    if ( !i || !w )	return;    QPixmap pix = qChoosePixmap( this );    if ( pix.isNull() )	return;    delete w->pixmap;    w->pixmap = new QPixmap( pix );    boxWidgets->blockSignals( TRUE );    QListBoxItem *old = i;    boxWidgets->changeItem( *w->pixmap, w->className, boxWidgets->currentItem() );    i = boxWidgets->item( boxWidgets->currentItem() );    customWidgets.insert( i, w );    customWidgets.remove( old );    boxWidgets->blockSignals( FALSE );    previewPixmap->setPixmap( *w->pixmap );}void CustomWidgetEditor::widthChanged( int wid ){    QListBoxItem *i = boxWidgets->item( boxWidgets->currentItem() );    MetaDataBase::CustomWidget *w = findWidget( i );    if ( !i || !w )	return;    w->sizeHint.setWidth( wid );    updateCustomWidgetSizes();}MetaDataBase::CustomWidget *CustomWidgetEditor::findWidget( QListBoxItem *i ){    if ( !i )	return 0;    QMap<QListBoxItem*, MetaDataBase::CustomWidget*>::Iterator it = customWidgets.find( i );    if ( it == customWidgets.end() )	return 0;    return *it;}void CustomWidgetEditor::chooseHeader(){    QListBoxItem *i = boxWidgets->item( boxWidgets->currentItem() );    MetaDataBase::CustomWidget *w = findWidget( i );    if ( !i || !w )	return;    QString h = QFileDialog::getOpenFileName( QString::null, tr( "Header Files (*.h *.h++ *.hxx)" ), this );    if ( h.isEmpty() )	return;    editHeader->setText( h );    localGlobalCombo->setCurrentItem( (int)MetaDataBase::CustomWidget::Global );}void CustomWidgetEditor::checkWidgetName(){    QListBoxItem *i = oldItem ? oldItem : boxWidgets->item( boxWidgets->currentItem() );    MetaDataBase::CustomWidget *w = findWidget( i );    oldItem = 0;    if ( !i || !w )	return;    if ( MetaDataBase::isWidgetNameUsed( w ) ) {	QString s = w->className;	w->className = oldName;	QMessageBox::information( this, tr( "Renaming a Custom Widget" ),				  tr( "Custom widget names must be unique.\n"				      "A custom widget called '%1' already exists, so it is not possible "				      "to rename this widget with this name." ).arg( s ) );	if ( i != boxWidgets->item( boxWidgets->currentItem() ) ) {	    boxWidgets->setCurrentItem( i );	    qApp->processEvents();	}	editClass->setText( w->className );	classNameChanged( w->className );    }}void CustomWidgetEditor::closeClicked(){    oldItem = 0;    checkTimer->stop();    checkWidgetName();    accept();}void CustomWidgetEditor::currentSignalChanged( QListBoxItem *i ){    editSignal->blockSignals( TRUE );    editSignal->setText( "" );    editSignal->blockSignals( FALSE );    if ( !i ) {	editSignal->setEnabled( FALSE );	buttonRemoveSignal->setEnabled( FALSE );	return;    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -