source: trunk/tools/designer/shared/widgetdatabase.cpp@ 7

Last change on this file since 7 was 2, checked in by dmik, 20 years ago

Imported xplatform parts of the official release 3.3.1 from Trolltech

  • Property svn:keywords set to Id
File size: 23.1 KB
Line 
1/**********************************************************************
2** Copyright (C) 2000-2002 Trolltech AS. All rights reserved.
3**
4** This file is part of Qt Designer.
5**
6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file.
10**
11** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
12** licenses may use this file in accordance with the Qt Commercial License
13** Agreement provided with the Software.
14**
15** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
16** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
17**
18** See http://www.trolltech.com/gpl/ for GPL licensing information.
19** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
20** information about Qt Commercial License Agreements.
21**
22** Contact info@trolltech.com if any conditions of this licensing are
23** not clear to you.
24**
25**********************************************************************/
26
27#include "widgetdatabase.h"
28#include "../interfaces/widgetinterface.h"
29
30#include <qapplication.h>
31#define NO_STATIC_COLORS
32#include <globaldefs.h>
33#include <qstrlist.h>
34#include <qdict.h>
35#include <qfile.h>
36#include <qtextstream.h>
37#include <qcleanuphandler.h>
38#include <qfeatures.h>
39
40#include <stdlib.h>
41
42const int dbsize = 300;
43const int dbcustom = 200;
44const int dbdictsize = 211;
45static WidgetDatabaseRecord* db[ dbsize ];
46static QDict<int> *className2Id = 0;
47static int dbcount = 0;
48static int dbcustomcount = 200;
49static QStrList *wGroups;
50static QStrList *invisibleGroups;
51static bool whatsThisLoaded = FALSE;
52static QPluginManager<WidgetInterface> *widgetPluginManager = 0;
53static bool plugins_set_up = FALSE;
54static bool was_in_setup = FALSE;
55
56QCleanupHandler<QPluginManager<WidgetInterface> > cleanup_manager;
57
58WidgetDatabaseRecord::WidgetDatabaseRecord()
59{
60 isForm = FALSE;
61 isContainer = FALSE;
62 icon = 0;
63 nameCounter = 0;
64 isCommon = FALSE;
65 isPlugin = FALSE;
66}
67
68WidgetDatabaseRecord::~WidgetDatabaseRecord()
69{
70 delete icon;
71}
72
73
74/*!
75 \class WidgetDatabase widgetdatabase.h
76 \brief The WidgetDatabase class holds information about widgets
77
78 The WidgetDatabase holds information about widgets like toolTip(),
79 iconSet(), ... It works Id-based, so all access functions take the
80 widget id as parameter. To get the id for a widget (classname), use
81 idFromClassName().
82
83 All access functions are static. Having multiple widgetdatabases in
84 one application doesn't make sense anyway and so you don't need more
85 than an instance of the widgetdatabase.
86
87 For creating widgets, layouts, etc. see WidgetFactory.
88*/
89
90/*!
91 Creates widget database. Does nothing.
92*/
93
94WidgetDatabase::WidgetDatabase()
95{
96}
97
98/*! Sets up the widget database. If the static widgetdatabase already
99 exists, the functions returns immediately.
100*/
101
102void WidgetDatabase::setupDataBase( int id )
103{
104 was_in_setup = TRUE;
105#ifndef UIC
106 Q_UNUSED( id )
107 if ( dbcount )
108 return;
109#else
110 if ( dbcount && id != -2 )
111 return;
112 if ( dbcount && !plugins_set_up ) {
113 setupPlugins();
114 return;
115 }
116 if ( dbcount && plugins_set_up)
117 return;
118#endif
119
120 wGroups = new QStrList;
121 invisibleGroups = new QStrList;
122 invisibleGroups->append( "Forms" );
123 invisibleGroups->append( "Temp" );
124 className2Id = new QDict<int>( dbdictsize );
125 className2Id->setAutoDelete( TRUE );
126
127 WidgetDatabaseRecord *r = 0;
128
129 r = new WidgetDatabaseRecord;
130 r->iconSet = "designer_pushbutton.png";
131 r->name = "QPushButton";
132 r->group = widgetGroup( "Buttons" );
133 r->toolTip = "Push Button";
134 r->isCommon = TRUE;
135
136 append( r );
137
138 r = new WidgetDatabaseRecord;
139 r->iconSet = "designer_toolbutton.png";
140 r->name = "QToolButton";
141 r->group = widgetGroup( "Buttons" );
142 r->toolTip = "Tool Button";
143
144 append( r );
145
146 r = new WidgetDatabaseRecord;
147 r->iconSet = "designer_radiobutton.png";
148 r->name = "QRadioButton";
149 r->group = widgetGroup( "Buttons" );
150 r->toolTip = "Radio Button";
151 r->isCommon = TRUE;
152
153 append( r );
154
155 r = new WidgetDatabaseRecord;
156 r->iconSet = "designer_checkbox.png";
157 r->name = "QCheckBox";
158 r->group = widgetGroup( "Buttons" );
159 r->toolTip = "Check Box";
160 r->isCommon = TRUE;
161
162 append( r );
163
164 r = new WidgetDatabaseRecord;
165 r->iconSet = "designer_groupbox.png";
166 r->name = "QGroupBox";
167 r->group = widgetGroup( "Containers" );
168 r->toolTip = "Group Box";
169 r->isContainer = TRUE;
170
171 append( r );
172
173 r = new WidgetDatabaseRecord;
174 r->iconSet = "designer_buttongroup.png";
175 r->name = "QButtonGroup";
176 r->group = widgetGroup( "Containers" );
177 r->toolTip = "Button Group";
178 r->isContainer = TRUE;
179 r->isCommon = TRUE;
180
181 append( r );
182
183 r = new WidgetDatabaseRecord;
184 r->iconSet = "designer_frame.png";
185 r->name = "QFrame";
186 r->group = widgetGroup( "Containers" );
187 r->toolTip = "Frame";
188 r->isContainer = TRUE;
189
190 append( r );
191
192 r = new WidgetDatabaseRecord;
193 r->iconSet = "designer_tabwidget.png";
194 r->name = "QTabWidget";
195 r->group = widgetGroup( "Containers" );
196 r->toolTip = "Tabwidget";
197 r->isContainer = TRUE;
198
199 append( r );
200
201 r = new WidgetDatabaseRecord;
202 r->iconSet = "designer_widgetstack.png";
203 r->name = "QWidgetStack";
204 r->group = widgetGroup( "Containers" );
205 r->toolTip = "Widget Stack";
206 r->isContainer = TRUE;
207
208 append( r );
209
210 r = new WidgetDatabaseRecord;
211 r->iconSet = "designer_toolbox.png";
212 r->name = "QToolBox";
213 r->group = widgetGroup( "Containers" );
214 r->toolTip = "Tool Box";
215 r->isContainer = TRUE;
216
217 append( r );
218
219 r = new WidgetDatabaseRecord;
220 r->iconSet = "designer_listbox.png";
221 r->name = "QListBox";
222 r->group = widgetGroup( "Views" );
223 r->toolTip = "List Box";
224 r->isCommon = TRUE;
225
226 append( r );
227
228 r = new WidgetDatabaseRecord;
229 r->iconSet = "designer_listview.png";
230 r->name = "QListView";
231 r->group = widgetGroup( "Views" );
232 r->toolTip = "List View";
233
234 append( r );
235
236#if !defined(QT_NO_ICONVIEW) || defined(UIC)
237 r = new WidgetDatabaseRecord;
238 r->iconSet = "designer_iconview.png";
239 r->name = "QIconView";
240 r->group = widgetGroup( "Views" );
241 r->toolTip = "Icon View";
242
243 append( r );
244#endif
245
246#if !defined(QT_NO_TABLE)
247 r = new WidgetDatabaseRecord;
248 r->iconSet = "designer_table.png";
249 r->name = "QTable";
250 r->group = widgetGroup( "Views" );
251 r->toolTip = "Table";
252
253 append( r );
254#endif
255
256#if !defined(QT_NO_SQL)
257 r = new WidgetDatabaseRecord;
258 r->iconSet = "designer_datatable.png";
259 r->includeFile = "qdatatable.h";
260 r->name = "QDataTable";
261 r->group = widgetGroup( "Database" );
262 r->toolTip = "Data Table";
263
264 append( r );
265#endif
266
267 r = new WidgetDatabaseRecord;
268 r->iconSet = "designer_lineedit.png";
269 r->name = "QLineEdit";
270 r->group = widgetGroup( "Input" );
271 r->toolTip = "Line Edit";
272 r->isCommon = TRUE;
273
274 append( r );
275
276 r = new WidgetDatabaseRecord;
277 r->iconSet = "designer_spinbox.png";
278 r->name = "QSpinBox";
279 r->group = widgetGroup( "Input" );
280 r->toolTip = "Spin Box";
281 r->isCommon = TRUE;
282
283 append( r );
284
285 r = new WidgetDatabaseRecord;
286 r->iconSet = "designer_dateedit.png";
287 r->name = "QDateEdit";
288 r->group = widgetGroup( "Input" );
289 r->toolTip = "Date Edit";
290 r->includeFile = "qdatetimeedit.h";
291
292 append( r );
293
294 r = new WidgetDatabaseRecord;
295 r->iconSet = "designer_timeedit.png";
296 r->name = "QTimeEdit";
297 r->group = widgetGroup( "Input" );
298 r->toolTip = "Time Edit";
299 r->includeFile = "qdatetimeedit.h";
300
301 append( r );
302
303 r = new WidgetDatabaseRecord;
304 r->iconSet = "designer_datetimeedit.png";
305 r->name = "QDateTimeEdit";
306 r->group = widgetGroup( "Input" );
307 r->toolTip = "Date-Time Edit";
308 r->includeFile = "qdatetimeedit.h";
309
310 append( r );
311
312 r = new WidgetDatabaseRecord;
313 r->iconSet = "designer_multilineedit.png";
314 r->name = "QMultiLineEdit";
315 r->group = widgetGroup( "Temp" );
316 r->toolTip = "Multi Line Edit";
317
318 append( r );
319
320 r = new WidgetDatabaseRecord;
321 r->iconSet = "designer_richtextedit.png";
322 r->name = "QTextEdit";
323 r->group = widgetGroup( "Input" );
324 r->toolTip = "Rich Text Edit";
325 r->isCommon = TRUE;
326
327 append( r );
328
329 r = new WidgetDatabaseRecord;
330 r->iconSet = "designer_combobox.png";
331 r->name = "QComboBox";
332 r->group = widgetGroup( "Input" );
333 r->toolTip = "Combo Box";
334 r->isCommon = TRUE;
335
336 append( r );
337
338 r = new WidgetDatabaseRecord;
339 r->iconSet = "designer_slider.png";
340 r->name = "QSlider";
341 r->group = widgetGroup( "Input" );
342 r->toolTip = "Slider";
343
344 append( r );
345
346 r = new WidgetDatabaseRecord;
347 r->iconSet = "designer_scrollbar.png";
348 r->name = "QScrollBar";
349 r->group = widgetGroup( "Input" );
350 r->toolTip = "Scrollbar";
351
352 append( r );
353
354 r = new WidgetDatabaseRecord;
355 r->iconSet = "designer_dial.png";
356 r->name = "QDial";
357 r->group = widgetGroup( "Input" );
358 r->toolTip = "Dial";
359
360 append( r );
361
362 r = new WidgetDatabaseRecord;
363 r->iconSet = "designer_label.png";
364 r->name = "QLabel";
365 r->group = widgetGroup( "Temp" );
366 r->toolTip = "Label";
367
368 append( r );
369
370 r = new WidgetDatabaseRecord;
371 r->iconSet = "designer_label.png";
372 r->name = "TextLabel";
373 r->group = widgetGroup( "Display" );
374 r->toolTip = "Text Label";
375 r->whatsThis = "The Text Label provides a widget to display static text.";
376 r->isCommon = TRUE;
377
378 append( r );
379
380 r = new WidgetDatabaseRecord;
381 r->iconSet = "designer_pixlabel.png";
382 r->name = "PixmapLabel";
383 r->group = widgetGroup( "Display" );
384 r->toolTip = "Pixmap Label";
385 r->whatsThis = "The Pixmap Label provides a widget to display pixmaps.";
386
387 append( r );
388
389 r = new WidgetDatabaseRecord;
390 r->iconSet = "designer_lcdnumber.png";
391 r->name = "QLCDNumber";
392 r->group = widgetGroup( "Display" );
393 r->toolTip = "LCD Number";
394
395 append( r );
396
397 r = new WidgetDatabaseRecord;
398 r->iconSet = "designer_line.png";
399 r->name = "Line";
400 r->group = widgetGroup( "Display" );
401 r->toolTip = "Line";
402 r->includeFile = "qframe.h";
403 r->whatsThis = "The Line widget provides horizontal and vertical lines.";
404
405 append( r );
406
407 r = new WidgetDatabaseRecord;
408 r->iconSet = "designer_progress.png";
409 r->name = "QProgressBar";
410 r->group = widgetGroup( "Display" );
411 r->toolTip = "Progress Bar";
412
413 append( r );
414
415 r = new WidgetDatabaseRecord;
416 r->iconSet = "designer_textview.png";
417 r->name = "QTextView";
418 r->group = widgetGroup( "Temp" );
419 r->toolTip = "Text View";
420
421 append( r );
422
423 r = new WidgetDatabaseRecord;
424 r->iconSet = "designer_textbrowser.png";
425 r->name = "QTextBrowser";
426 r->group = widgetGroup( "Display" );
427 r->toolTip = "Text Browser";
428
429 append( r );
430
431 r = new WidgetDatabaseRecord;
432 r->iconSet = "designer_spacer.png";
433 r->name = "Spacer";
434 r->group = widgetGroup( "Temp" );
435 r->toolTip = "Spacer";
436 r->whatsThis = "The Spacer provides horizontal and vertical spacing to be able to manipulate the behaviour of layouts.";
437
438 append( r );
439
440 r = new WidgetDatabaseRecord;
441 r->name = "QWidget";
442 r->isForm = TRUE;
443 r->group = widgetGroup( "Forms" );
444
445 append( r );
446
447 r = new WidgetDatabaseRecord;
448 r->name = "QDialog";
449 r->group = widgetGroup( "Forms" );
450 r->isForm = TRUE;
451
452 append( r );
453
454 r = new WidgetDatabaseRecord;
455 r->name = "QWizard";
456 r->group = widgetGroup( "Forms" );
457 r->isContainer = TRUE;
458
459 append( r );
460
461 r = new WidgetDatabaseRecord;
462 r->name = "QDesignerWizard";
463 r->group = widgetGroup( "Forms" );
464 r->isContainer = TRUE;
465
466 append( r );
467
468 r = new WidgetDatabaseRecord;
469 r->name = "QLayoutWidget";
470 r->group = widgetGroup( "Temp" );
471 r->includeFile = "";
472 r->isContainer = TRUE;
473
474 append( r );
475
476 r = new WidgetDatabaseRecord;
477 r->name = "QSplitter";
478 r->group = widgetGroup( "Temp" );
479 r->includeFile = "qsplitter.h";
480 r->isContainer = TRUE;
481
482 append( r );
483
484 r = new WidgetDatabaseRecord;
485 r->iconSet = "designer_tabwidget.png";
486 r->name = "QDesignerTabWidget";
487 r->group = widgetGroup( "Temp" );
488 r->isContainer = TRUE;
489
490 append( r );
491
492 r = new WidgetDatabaseRecord;
493 r->iconSet = "designer_tabwidget.png";
494 r->name = "QDesignerWidget";
495 r->group = widgetGroup( "Temp" );
496 r->isContainer = TRUE;
497
498 append( r );
499
500 r = new WidgetDatabaseRecord;
501 r->iconSet = "designer_tabwidget.png";
502 r->name = "QDesignerDialog";
503 r->group = widgetGroup( "Temp" );
504 r->isContainer = TRUE;
505
506 append( r );
507
508 r = new WidgetDatabaseRecord;
509 r->iconSet = "";
510 r->name = "QMainWindow";
511 r->includeFile = "qmainwindow.h";
512 r->group = widgetGroup( "Temp" );
513 r->isContainer = TRUE;
514
515 append( r );
516
517 r = new WidgetDatabaseRecord;
518 r->iconSet = "";
519 r->name = "QDesignerAction";
520 r->includeFile = "qaction.h";
521 r->group = widgetGroup( "Temp" );
522 r->isContainer = FALSE;
523
524 append( r );
525
526 r = new WidgetDatabaseRecord;
527 r->iconSet = "";
528 r->name = "QDesignerActionGroup";
529 r->includeFile = "qaction.h";
530 r->group = widgetGroup( "Temp" );
531 r->isContainer = FALSE;
532
533 append( r );
534
535 r = new WidgetDatabaseRecord;
536 r->iconSet = "";
537 r->name = "QScrollView";
538 r->includeFile = "qscrollview.h";
539 r->group = widgetGroup( "Temp" );
540 r->isContainer = TRUE;
541
542 append( r );
543
544#ifndef QT_NO_SQL
545 r = new WidgetDatabaseRecord;
546 r->iconSet = "";
547 r->name = "QDataBrowser";
548 r->includeFile = "qdatabrowser.h";
549 r->group = widgetGroup( "Database" );
550 r->toolTip = "Data Browser";
551 r->iconSet = "designer_databrowser.png";
552 r->isContainer = TRUE;
553
554 append( r );
555
556 r = new WidgetDatabaseRecord;
557 r->iconSet = "";
558 r->name = "QDataView";
559 r->includeFile = "qdataview.h";
560 r->group = widgetGroup( "Database" );
561 r->toolTip = "Data View";
562 r->iconSet = "designer_dataview.png";
563 r->isContainer = TRUE;
564
565 append( r );
566#endif
567
568#ifndef UIC
569 setupPlugins();
570#endif
571}
572
573void WidgetDatabase::setupPlugins()
574{
575 if ( plugins_set_up )
576 return;
577 plugins_set_up = TRUE;
578 QStringList widgets = widgetManager()->featureList();
579 for ( QStringList::Iterator it = widgets.begin(); it != widgets.end(); ++it ) {
580 if ( hasWidget( *it ) )
581 continue;
582 WidgetDatabaseRecord *r = new WidgetDatabaseRecord;
583 WidgetInterface *iface = 0;
584 widgetManager()->queryInterface( *it, &iface );
585 if ( !iface )
586 continue;
587
588#ifndef UIC
589 QIconSet icon = iface->iconSet( *it );
590 if ( !icon.pixmap().isNull() )
591 r->icon = new QIconSet( icon );
592#endif
593 QString grp = iface->group( *it );
594 if ( grp.isEmpty() )
595 grp = "3rd party widgets";
596 r->group = widgetGroup( grp );
597 r->toolTip = iface->toolTip( *it );
598 r->whatsThis = iface->whatsThis( *it );
599 r->includeFile = iface->includeFile( *it );
600 r->isContainer = iface->isContainer( *it );
601 r->name = *it;
602 r->isPlugin = TRUE;
603 append( r );
604 iface->release();
605 }
606}
607
608/*!
609 Returns the number of elements in the widget database.
610*/
611
612int WidgetDatabase::count()
613{
614 setupDataBase( -1 );
615 return dbcount;
616}
617
618/*!
619 Returns the id at which the ids of custom widgets start.
620*/
621
622int WidgetDatabase::startCustom()
623{
624 setupDataBase( -1 );
625 return dbcustom;
626}
627
628/*!
629 Returns the iconset which represents the class registered as \a id.
630*/
631
632QIconSet WidgetDatabase::iconSet( int id )
633{
634 setupDataBase( id );
635 WidgetDatabaseRecord *r = at( id );
636 if ( !r )
637 return QIconSet();
638#if !defined(UIC) && !defined(RESOURCE)
639 if ( !r->icon ) {
640 if ( r->iconSet.isEmpty() )
641 return QIconSet();
642 QPixmap pix = QPixmap::fromMimeSource( r->iconSet );
643 if ( pix.isNull() )
644 pix = QPixmap( r->iconSet );
645 r->icon = new QIconSet( pix );
646 }
647 return *r->icon;
648#else
649 return QIconSet();
650#endif
651}
652
653/*!
654 Returns the classname of the widget which is registered as \a id.
655*/
656
657QString WidgetDatabase::className( int id )
658{
659 setupDataBase( id );
660 WidgetDatabaseRecord *r = at( id );
661 if ( !r )
662 return QString::null;
663 return r->name;
664}
665
666/*!
667 Returns the group the widget registered as \a id belongs to.
668*/
669
670QString WidgetDatabase::group( int id )
671{
672 setupDataBase( id );
673 WidgetDatabaseRecord *r = at( id );
674 if ( !r )
675 return QString::null;
676 return r->group;
677}
678
679/*!
680 Returns the tooltip text of the widget which is registered as \a id.
681*/
682
683QString WidgetDatabase::toolTip( int id )
684{
685 setupDataBase( id );
686 WidgetDatabaseRecord *r = at( id );
687 if ( !r )
688 return QString::null;
689 return r->toolTip;
690}
691
692/*!
693 Returns the what's this? text of the widget which is registered as \a id.
694*/
695
696QString WidgetDatabase::whatsThis( int id )
697{
698 setupDataBase( id );
699 WidgetDatabaseRecord *r = at( id );
700 if ( !r )
701 return QString::null;
702 return r->whatsThis;
703}
704
705/*!
706 Returns the include file if the widget which is registered as \a id.
707*/
708
709QString WidgetDatabase::includeFile( int id )
710{
711 setupDataBase( id );
712 WidgetDatabaseRecord *r = at( id );
713 if ( !r )
714 return QString::null;
715 if ( r->includeFile.isNull() )
716 return r->name.lower() + ".h";
717 return r->includeFile;
718}
719
720/*! Returns whether the widget registered as \a id is a form.
721*/
722bool WidgetDatabase::isForm( int id )
723{
724 setupDataBase( id );
725 WidgetDatabaseRecord *r = at( id );
726 if ( !r )
727 return FALSE;
728 return r->isForm;
729}
730
731/*! Returns whether the widget registered as \a id can have children.
732*/
733
734bool WidgetDatabase::isContainer( int id )
735{
736 setupDataBase( id );
737 WidgetDatabaseRecord *r = at( id );
738 if ( !r )
739 return FALSE;
740 return r->isContainer || r->isForm;
741}
742
743bool WidgetDatabase::isCommon( int id )
744{
745 setupDataBase( id );
746 WidgetDatabaseRecord *r = at( id );
747 if ( !r )
748 return FALSE;
749 return r->isCommon;
750}
751
752QString WidgetDatabase::createWidgetName( int id )
753{
754 setupDataBase( id );
755 QString n = className( id );
756 if ( n == "QLayoutWidget" )
757 n = "Layout";
758 if ( n[ 0 ] == 'Q' && n[ 1 ].lower() != n[ 1 ] )
759 n = n.mid( 1 );
760 int colonColon = n.findRev( "::" );
761 if ( colonColon != -1 )
762 n = n.mid( colonColon + 2 );
763
764 WidgetDatabaseRecord *r = at( id );
765 if ( !r )
766 return n;
767 n += QString::number( ++r->nameCounter );
768 n[0] = n[0].lower();
769 return n;
770}
771
772/*! Returns the id for \a name or -1 if \a name is unknown.
773 */
774int WidgetDatabase::idFromClassName( const QString &name )
775{
776 setupDataBase( -1 );
777 if ( name.isEmpty() )
778 return 0;
779 int *i = className2Id->find( name );
780 if ( i )
781 return *i;
782 if ( name == "FormWindow" )
783 return idFromClassName( "QLayoutWidget" );
784#ifdef UIC
785 setupDataBase( -2 );
786 i = className2Id->find( name );
787 if ( i )
788 return *i;
789#endif
790 return -1;
791}
792
793bool WidgetDatabase::hasWidget( const QString &name )
794{
795 return className2Id->find( name ) != 0;
796}
797
798WidgetDatabaseRecord *WidgetDatabase::at( int index )
799{
800 if ( index < 0 )
801 return 0;
802 if ( index >= dbcustom && index < dbcustomcount )
803 return db[ index ];
804 if ( index < dbcount )
805 return db[ index ];
806 return 0;
807}
808
809void WidgetDatabase::insert( int index, WidgetDatabaseRecord *r )
810{
811 if ( index < 0 || index >= dbsize )
812 return;
813 db[ index ] = r;
814 className2Id->insert( r->name, new int( index ) );
815 if ( index < dbcustom )
816 dbcount = QMAX( dbcount, index );
817}
818
819void WidgetDatabase::append( WidgetDatabaseRecord *r )
820{
821 if ( !was_in_setup )
822 setupDataBase( -1 );
823 insert( dbcount++, r );
824}
825
826QString WidgetDatabase::widgetGroup( const QString &g )
827{
828 if ( wGroups->find( g ) == -1 )
829 wGroups->append( g );
830 return g;
831}
832
833bool WidgetDatabase::isGroupEmpty( const QString &grp )
834{
835 WidgetDatabaseRecord *r = 0;
836 for ( int i = 0; i < dbcount; ++i ) {
837 if ( !( r = db[ i ] ) )
838 continue;
839 if ( r->group == grp )
840 return FALSE;
841 }
842 return TRUE;
843}
844
845QString WidgetDatabase::widgetGroup( int i )
846{
847 setupDataBase( -1 );
848 if ( i >= 0 && i < (int)wGroups->count() )
849 return wGroups->at( i );
850 return QString::null;
851}
852
853int WidgetDatabase::numWidgetGroups()
854{
855 setupDataBase( -1 );
856 return wGroups->count();
857}
858
859bool WidgetDatabase::isGroupVisible( const QString &g )
860{
861 setupDataBase( -1 );
862 return invisibleGroups->find( g ) == -1;
863}
864
865int WidgetDatabase::addCustomWidget( WidgetDatabaseRecord *r )
866{
867 insert( dbcustomcount++, r );
868 return dbcustomcount - 1;
869}
870
871void WidgetDatabase::customWidgetClassNameChanged( const QString &oldName,
872 const QString &newName )
873{
874 int id = idFromClassName( oldName );
875 if ( id == -1 )
876 return;
877 WidgetDatabaseRecord *r = db[ id ];
878 r->name = newName;
879 className2Id->remove( oldName );
880 className2Id->insert( newName, new int( id ) );
881}
882
883bool WidgetDatabase::isCustomWidget( int id )
884{
885 if ( id >= dbcustom && id < dbcustomcount )
886 return TRUE;
887 return FALSE;
888}
889
890bool WidgetDatabase::isCustomPluginWidget( int id )
891{
892 setupDataBase( id );
893 WidgetDatabaseRecord *r = at( id );
894 if ( !r )
895 return FALSE;
896 return r->isPlugin;
897}
898
899bool WidgetDatabase::isWhatsThisLoaded()
900{
901 return whatsThisLoaded;
902}
903
904void WidgetDatabase::loadWhatsThis( const QString &docPath )
905{
906 QString whatsthisFile = docPath + "/whatsthis";
907 QFile f( whatsthisFile );
908 if ( !f.open( IO_ReadOnly ) )
909 return;
910 QTextStream ts( &f );
911 while ( !ts.atEnd() ) {
912 QString s = ts.readLine();
913 QStringList l = QStringList::split( " | ", s );
914 int id = idFromClassName( l[ 1 ] );
915 WidgetDatabaseRecord *r = at( id );
916 if ( r )
917 r->whatsThis = l[ 0 ];
918 }
919 whatsThisLoaded = TRUE;
920}
921
922
923// ### Qt 3.1: make these publically accessible via QWidgetDatabase API
924#if defined(UIC)
925bool dbnounload = FALSE;
926QStringList *dbpaths = 0;
927#else
928extern QString *qwf_plugin_dir;
929#endif
930
931
932QPluginManager<WidgetInterface> *widgetManager()
933{
934 if ( !widgetPluginManager ) {
935 QString pluginDir = "/designer";
936#if !defined(UIC)
937 if ( qwf_plugin_dir )
938 pluginDir = *qwf_plugin_dir;
939#endif
940 widgetPluginManager = new QPluginManager<WidgetInterface>( IID_Widget, QApplication::libraryPaths(), pluginDir );
941 cleanup_manager.add( &widgetPluginManager );
942#if defined(UIC)
943 if ( dbnounload )
944 widgetPluginManager->setAutoUnload( FALSE );
945 if ( dbpaths ) {
946 QStringList::ConstIterator it = dbpaths->begin();
947 for ( ; it != dbpaths->end(); ++it )
948 widgetPluginManager->addLibraryPath( *it );
949 }
950#endif
951 }
952 return widgetPluginManager;
953}
Note: See TracBrowser for help on using the repository browser.