1
/***************************************************************************
2
* Copyright (C) 2005 by Adam Treat *
5
* Copyright (C) 2004 by Scott Wheeler *
8
* This program is free software; you can redistribute it and/or modify *
9
* it under the terms of the GNU General Public License as published by *
10
* the Free Software Foundation; either version 2 of the License, or *
11
* (at your option) any later version. *
13
***************************************************************************/
15
#include <kapplication.h>
16
#include <kiconloader.h>
18
#include <kmessagebox.h>
19
#include <ksplashscreen.h>
20
#include <kstandarddirs.h>
21
#include <kparts/partmanager.h>
22
#include <kpopupmenu.h>
28
#include <qwidgetstack.h>
30
#include "datatablebox.h"
31
#include "datatable.h"
32
#include "datakiosk.h"
36
#include "datareport.h"
38
#include "actioncollection.h"
39
#include "databaseconnection.h"
41
#define widget (kapp->mainWidget())
43
using namespace ActionCollection;
45
DataTableBox::DataTableBox( QWidget *parent, QWidgetStack *dataTableStack,
47
KListView( parent, name ),
48
Project( dataTableStack ),
50
m_hasSelection( false ),
51
m_doingMultiSelect( false ),
52
m_treeViewSetup( false ),
56
setFocusPolicy( QWidget::ClickFocus );
59
addColumn( "DataTables", width() );
61
header() ->blockSignals( true );
63
header() ->blockSignals( false );
69
setAcceptDrops( false );
70
setDragEnabled( false );
71
setSelectionModeExt( Single );
73
m_listMenu = new KPopupMenu( this );
75
action( "create_childtable" ) ->plug( m_listMenu );
76
action( "create_search" ) ->plug( m_listMenu );
77
action( "create_report" ) ->plug( m_listMenu );
78
m_listMenu->insertSeparator();
79
action( "edit_table" ) ->plug( m_listMenu );
80
action( "add_virtual" ) ->plug( m_listMenu );
81
m_listMenu->insertSeparator();
82
action( "table_up" ) ->plug( m_listMenu );
83
action( "table_down" ) ->plug( m_listMenu );
84
m_listMenu->insertSeparator();
85
action( "remove_table" ) ->plug( m_listMenu );
87
m_reportMenu = new KPopupMenu( this );
88
action( "refresh_report" ) ->plug( m_reportMenu );
89
action( "print" ) ->plug( m_reportMenu );
90
m_reportMenu->insertSeparator();
91
action( "edit_report" ) ->plug( m_reportMenu );
92
m_reportMenu->insertSeparator();
93
action( "remove_report" ) ->plug( m_reportMenu );
95
// add the view modes stuff
97
KSelectAction *viewModeAction =
98
new KSelectAction( i18n( "View Modes" ), "view_choose", KShortcut(), actions(), "view_mode_menu" );
100
m_viewModes.append( new ViewMode( this ) );
101
m_viewModes.append( new CompactViewMode( this ) );
102
m_viewModes.append( new TreeViewMode( this ) );
104
QStringList modeNames;
106
for ( QValueListIterator<ViewMode *> it = m_viewModes.begin(); it != m_viewModes.end(); ++it )
107
modeNames.append( ( *it ) ->name() );
109
viewModeAction->setItems( modeNames );
111
QPopupMenu *p = viewModeAction->popupMenu();
113
p->changeItem( 0, SmallIconSet( "view_detailed" ), modeNames[ 0 ] );
114
p->changeItem( 1, SmallIconSet( "view_text" ), modeNames[ 1 ] );
115
p->changeItem( 2, SmallIconSet( "view_tree" ), modeNames[ 2 ] );
117
viewModeAction->setCurrentItem( m_viewModeIndex );
118
m_viewModes[ m_viewModeIndex ] ->setShown( true );
120
connect( viewModeAction, SIGNAL( activated( int ) ), this, SLOT( slotSetViewMode( int ) ) );
122
connect( this, SIGNAL( selectionChanged() ),
123
this, SLOT( slotWidgetChanged() ) );
125
connect( this, SIGNAL( contextMenuRequested( QListViewItem *, const QPoint &, int ) ),
126
this, SLOT( slotShowContextMenu( QListViewItem *, const QPoint &, int ) ) );
132
DataTableBox::~DataTableBox()
137
void DataTableBox::raise( DataTable *dataTable )
142
Item *i = m_dataTableDict.find( dataTable );
145
setSelected( i, true );
148
ensureItemVisible( currentItem() );
151
void DataTableBox::raise( DataReport *dataReport )
153
Project::raise( dataReport );
157
Item *i = m_dataTableDict.find( dataReport );
160
setSelected( i, true );
163
ensureItemVisible( currentItem() );
166
void DataTableBox::initialize()
169
pm.load( locate( "appdata", "pics/datakiosk-splash.png" ) );
170
KSplashScreen *splash = new KSplashScreen( pm );
172
connect( this, SIGNAL( splashMessage( const QString &, int, const QColor & ) ),
173
splash, SLOT( message( const QString &, int, const QColor & ) ) );
175
if ( !fileName().isEmpty() )
180
if ( loadDataTables() )
182
setSelected( currentItem(), false );
183
setCurrentItem( firstChild() );
184
setSelected( firstChild(), true );
185
action( "edit_project" ) ->setEnabled( true );
186
action( "create_datatable" ) ->setEnabled( true );
187
action( "save_project" ) ->setEnabled( true );
188
action( "save_project_as" ) ->setEnabled( true );
189
action( "close_project" ) ->setEnabled( true );
190
action( "print" ) ->setEnabled( false );
194
action( "edit_project" ) ->setEnabled( false );
195
action( "create_datatable" ) ->setEnabled( false );
196
action( "save_project" ) ->setEnabled( false );
197
action( "save_project_as" ) ->setEnabled( false );
198
action( "close_project" ) ->setEnabled( false );
199
action( "print" ) ->setEnabled( false );
200
emit selectionChanged();
203
if ( !fileName().isEmpty() )
204
splash->finish( this );
206
m_clipboard = new DataClip( KApplication::desktop() );
207
connect( widget, SIGNAL( showing() ),
208
this, SLOT( clipOnWindowShown() ) );
209
connect( widget, SIGNAL( hiding() ),
210
m_clipboard, SLOT( hide() ) );
211
connect( widget, SIGNAL( raising() ),
212
m_clipboard, SLOT( raise() ) );
213
connect( widget, SIGNAL( lowering() ),
214
m_clipboard, SLOT( lower() ) );
220
void DataTableBox::uglyInitialize()
222
QTimer::singleShot( 0, this, SLOT( slotInitialize() ) );
225
void DataTableBox::newProject()
227
createDatabaseDataTable();
228
currentItem() ->setSelected( true );
229
currentItem() ->repaint();
230
emit selectionChanged();
231
action( "edit_project" ) ->setEnabled( true );
232
action( "create_datatable" ) ->setEnabled( true );
233
action( "save_project" ) ->setEnabled( true );
234
action( "save_project_as" ) ->setEnabled( true );
235
action( "close_project" ) ->setEnabled( true );
236
action( "print" ) ->setEnabled( false );
239
void DataTableBox::closeProject()
241
Project::closeProject();
247
void DataTableBox::clipboard()
249
Project::clipboard();
251
if ( m_clipboard->isVisible() )
256
m_clipShown = m_clipboard->isVisible();
259
void DataTableBox::clipOnWindowShown()
265
DataTable *DataTableBox::currentDataTable() const
267
Item * item = dynamic_cast<Item *>( currentItem() );
270
if ( DataTable * dataTable = dynamic_cast<DataTable*>( item->itemWidget() ) )
272
if ( item && dataTable )
275
return dynamic_cast<DataTable *>( dataTableStack() ->visibleWidget() );
280
DataReport *DataTableBox::currentDataReport() const
282
Item * item = dynamic_cast<Item *>( currentItem() );
285
if ( DataReport * dataReport = dynamic_cast<DataReport*>( item->itemWidget() ) )
287
if ( item && dataReport )
290
return dynamic_cast<DataReport *>( dataTableStack() ->visibleWidget() );
295
DataTable *DataTableBox::rootOfCurrentDataTable()
297
ItemList items = selectedItems();
298
if ( items.count() > 1 )
301
Item* root = items[ 0 ];
302
while ( root->QListViewItem::parent() )
304
root = static_cast<Item *>( root->QListViewItem::parent() );
307
return dynamic_cast<DataTable*>( root->itemWidget() );
310
DataTableList DataTableBox::dataTablesInCurrentTree()
312
DataTableList dataTables;
314
ItemList items = selectedItems();
315
if ( items.count() > 1 )
318
Item* root = items[ 0 ];
319
while ( root->QListViewItem::parent() )
321
root = static_cast<Item *>( root->QListViewItem::parent() );
324
QListViewItemIterator it( root );
325
while ( it.current() )
327
if ( it.current() == root->nextSibling() )
330
Item *item = static_cast<Item *>( ( *it ) );
331
if ( DataTable * dataTable = dynamic_cast<DataTable*>( item ->itemWidget() ) )
332
dataTables.append( dataTable );
339
DataTableList DataTableBox::dataTablesInDataTableTree( DataTable *dataTable )
341
DataTableList dataTables;
344
for ( QListViewItemIterator it( this ); it.current(); ++it )
346
Item * item = dynamic_cast<Item *>( *it );
348
if ( DataTable * d = dynamic_cast<DataTable*>( item->itemWidget() ) )
350
if ( d == dataTable )
361
while ( root->QListViewItem::parent() )
363
root = static_cast<Item *>( root->QListViewItem::parent() );
366
QListViewItemIterator it( root );
367
while ( it.current() )
369
if ( it.current() == root->nextSibling() )
372
Item *item = static_cast<Item *>( ( *it ) );
373
if ( DataTable * dataTable = dynamic_cast<DataTable*>( item ->itemWidget() ) )
374
dataTables.append( dataTable );
381
DataTableList DataTableBox::childrenOfDataTable( DataTable *dataTable )
383
DataTableList dataTables;
386
for ( QListViewItemIterator it( this ); it.current(); ++it )
388
Item * item = dynamic_cast<Item *>( *it );
390
if ( DataTable * d = dynamic_cast<DataTable*>( item->itemWidget() ) )
392
if ( d == dataTable )
403
if ( !root->firstChild() )
406
QListViewItemIterator it( root->firstChild() );
407
while ( it.current() )
409
if ( it.current()->depth() <= root->depth() )
412
Item *item = static_cast<Item *>( ( *it ) );
414
if ( DataTable * dataTable = dynamic_cast<DataTable*>( item ->itemWidget() ) )
415
dataTables.append( dataTable );
422
void DataTableBox::scrollTableUp()
424
QListViewItem* nextItem = currentItem()->itemAbove();
427
nextItem = lastItem();
431
currentItem()->setSelected( false );
432
nextItem->setSelected( true );
433
setCurrentItem( nextItem );
436
if ( dynamic_cast<DataReport*>( dynamic_cast<Item*>( nextItem )->itemWidget() ) )
442
void DataTableBox::scrollTableDown()
444
QListViewItem* nextItem = currentItem()->itemBelow();
447
nextItem = firstChild();
451
currentItem()->setSelected( false );
452
nextItem->setSelected( true );
453
setCurrentItem( nextItem );
456
if ( dynamic_cast<DataReport*>( dynamic_cast<Item*>( nextItem )->itemWidget() ) )
462
void DataTableBox::setSplashMessage( const QString &txt )
464
emit splashMessage( txt, Qt::AlignRight, QColor( 0, 84, 255 ) );
467
void DataTableBox::setupDataTable( DataTable *dataTable, const QString &iconName )
469
Project::setupDataTable( dataTable, iconName );
470
Item *item = new Item( this, iconName, dataTable->name(), dataTable );
471
// connect( item, SIGNAL( itemDestroyed( Item* ) ),
472
// this, SLOT( slotItemDestroyed( Item* ) ) );
473
connect( dataTable, SIGNAL( tableRefreshed() ),
474
item, SLOT( repaintRequested() ) );
475
connect( dataTable, SIGNAL( signalNameChanged( const QString & ) ),
476
item, SLOT( slotSetName( const QString & ) ) );
479
void DataTableBox::setupDataTable( DataTable *dataTable, const QString &iconName, Item *parentItem )
481
Project::setupDataTable( dataTable, iconName );
482
Item *item = new Item( parentItem, iconName, dataTable->name(), dataTable );
483
// connect( item, SIGNAL( itemDestroyed( Item* ) ),
484
// this, SLOT( slotItemDestroyed( Item* ) ) );
485
connect( dataTable, SIGNAL( tableRefreshed() ),
486
item, SLOT( repaintRequested() ) );
487
connect( dataTable, SIGNAL( signalNameChanged( const QString & ) ),
488
item, SLOT( slotSetName( const QString & ) ) );
491
void DataTableBox::setupDataTable( DataTable *dataTable, const QString &iconName, DataTable *parentTable )
493
Project::setupDataTable( dataTable, iconName );
494
Item *item = new Item( m_dataTableDict.find( parentTable ), iconName, dataTable->name(), dataTable );
495
// connect( item, SIGNAL( itemDestroyed( Item* ) ),
496
// this, SLOT( slotItemDestroyed( Item* ) ) );
497
connect( dataTable, SIGNAL( tableRefreshed() ),
498
item, SLOT( repaintRequested() ) );
499
connect( dataTable, SIGNAL( signalNameChanged( const QString & ) ),
500
item, SLOT( slotSetName( const QString & ) ) );
503
void DataTableBox::setIconName( DataTable* dataTable, const QString &iconName )
505
for ( QListViewItemIterator it( this ); it.current(); ++it )
507
Item *item = static_cast<Item *>( *it );
508
if ( DataTable * d = dynamic_cast<DataTable*>( item->itemWidget() ) )
510
if ( d ->name() == dataTable->name() )
512
int iconSize = viewModeIndex() == 0 ? 32 : 16;
513
static_cast<Item *>( *it ) ->setIconName( iconName );
514
static_cast<Item *>( *it ) ->setPixmap( 0, SmallIcon( iconName, iconSize ) );
520
void DataTableBox::setupDataReport( DataReport *dataReport, const QString &iconName, Item *parentItem )
522
Project::setupDataReport( dataReport, iconName );
523
Item *item = new Item( parentItem, iconName, dataReport->name(), dataReport );
524
// connect( item, SIGNAL( itemDestroyed( Item* ) ),
525
// this, SLOT( slotItemDestroyed( Item* ) ) );
526
connect( dataReport, SIGNAL( reportRefreshed() ),
527
item, SLOT( repaintRequested() ) );
528
connect( dataReport, SIGNAL( signalNameChanged( const QString & ) ),
529
item, SLOT( slotSetName( const QString & ) ) );
532
void DataTableBox::setupDataReport( DataReport *dataReport, const QString &iconName, DataTable *parentTable )
534
Project::setupDataReport( dataReport, iconName );
535
Item *item = new Item( m_dataTableDict.find( parentTable ), iconName, dataReport->name(), dataReport );
536
// connect( item, SIGNAL( itemDestroyed( Item* ) ),
537
// this, SLOT( slotItemDestroyed( Item* ) ) );
538
connect( parentTable, SIGNAL( tableRefreshed() ),
539
dataReport, SLOT( queueRefresh() ) );
540
connect( dataReport, SIGNAL( reportRefreshed() ),
541
item, SLOT( repaintRequested() ) );
542
connect( dataReport, SIGNAL( signalNameChanged( const QString & ) ),
543
item, SLOT( slotSetName( const QString & ) ) );
546
void DataTableBox::setIconName( DataReport *dataReport, const QString &iconName )
548
for ( QListViewItemIterator it( this ); it.current(); ++it )
550
Item *item = static_cast<Item *>( *it );
551
if ( DataReport * d = dynamic_cast<DataReport*>( item->itemWidget() ) )
553
if ( d ->name() == dataReport->name() )
555
int iconSize = viewModeIndex() == 0 ? 32 : 16;
556
static_cast<Item *>( *it ) ->setIconName( iconName );
557
static_cast<Item *>( *it ) ->setPixmap( 0, SmallIcon( iconName, iconSize ) );
563
void DataTableBox::readConfig()
565
KConfigGroup config( KGlobal::config(), "DataTableBox" );
566
m_viewModeIndex = config.readNumEntry( "ViewMode", 0 );
569
void DataTableBox::saveConfig()
571
KConfigGroup config( KGlobal::config(), "DataTableBox" );
572
config.writeEntry( "ViewMode", action<KSelectAction>( "view_mode_menu" ) ->currentItem() );
573
KGlobal::config() ->sync();
576
void DataTableBox::slotItemDestroyed( Item * )
578
// removeName( item ->text( 0 ) );
579
// m_dataTableDict.remove( item ->dataTable() );
582
void DataTableBox::editSearch()
584
Project::editSearch();
588
void DataTableBox::removeSearch()
590
Project::removeSearch();
591
emit searchRemoved();
594
void DataTableBox::invokeSearch( const QString &search )
596
Project::invokeSearch( search );
597
emit searchInvoked( search );
600
void DataTableBox::advancedSearchRequested()
602
emit advancedSearchClicked();
605
void DataTableBox::removeTable()
607
ItemList items = selectedItems();
609
if ( items.isEmpty() )
612
DataTableList removeQueue;
614
for ( ItemList::ConstIterator it = items.begin(); it != items.end(); ++it )
616
if ( DataTable * dataTable = dynamic_cast<DataTable*>( ( *it ) ->itemWidget() ) )
618
removeName( ( *it ) ->text( 0 ) );
619
m_dataTableDict.remove( dataTable );
620
removeQueue.append( dataTable );
621
removeDataTable( ( *it ) ->text( 0 ) );
625
Item *x = static_cast<Item *>( items.back() ->nextSibling() );
626
if ( x && dynamic_cast<DataTable*>( x->itemWidget() ) )
630
Item *y = static_cast<Item *>( items.front() ->itemAbove() );
631
while ( y && !dynamic_cast<DataTable*>( y->itemWidget() ) )
632
y = static_cast<Item *>( y->itemAbove() );
637
for ( DataTableList::Iterator it = removeQueue.begin(); it != removeQueue.end(); ++it )
639
DataTableList dataTables = dataTablesInDataTablePeerTree( *it );
640
DataTableList::Iterator it2 = dataTables.begin();
641
for ( ; it2 != dataTables.end(); ++it2 )
643
if ( ( *it2 ) == ( *it ) )
645
else if ( ( *it2 )->number() > ( *it )->number() )
646
( *it2 )->setNumber( ( *it2 )->number() - 1 );
653
void DataTableBox::sortTables()
655
if ( childCount() > 1 )
658
firstChild()->sort();
661
void DataTableBox::removeReport()
663
ItemList items = selectedItems();
665
if ( items.isEmpty() )
668
DataReportList removeQueue;
670
for ( ItemList::ConstIterator it = items.begin(); it != items.end(); ++it )
672
if ( DataReport * dataReport = dynamic_cast<DataReport*>( ( *it ) ->itemWidget() ) )
674
removeName( ( *it ) ->text( 0 ) );
675
m_dataTableDict.remove( dataReport );
676
removeQueue.append( dataReport );
677
removeDataReport( ( *it ) ->text( 0 ) );
681
Item *x = static_cast<Item *>( items.back() ->nextSibling() );
682
if ( x && dynamic_cast<DataTable*>( x->itemWidget() ) )
686
Item *y = static_cast<Item *>( items.front() ->itemAbove() );
687
while ( y && !dynamic_cast<DataTable*>( y->itemWidget() ) )
688
y = static_cast<Item *>( y->itemAbove() );
693
for ( DataReportList::Iterator it = removeQueue.begin(); it != removeQueue.end(); ++it )
699
void DataTableBox::contentsMousePressEvent( QMouseEvent *e )
701
if ( e->button() == LeftButton )
702
m_doingMultiSelect = true;
703
KListView::contentsMousePressEvent( e );
706
void DataTableBox::contentsMouseReleaseEvent( QMouseEvent *e )
708
if ( e->button() == LeftButton )
710
m_doingMultiSelect = false;
713
KListView::contentsMouseReleaseEvent( e );
716
void DataTableBox::keyPressEvent( QKeyEvent *e )
718
if ( ( e->key() == Key_Up || e->key() == Key_Down ) && e->state() == ShiftButton )
719
m_doingMultiSelect = true;
720
KListView::keyPressEvent( e );
723
void DataTableBox::keyReleaseEvent( QKeyEvent *e )
725
if ( m_doingMultiSelect && e->key() == Key_Shift )
727
m_doingMultiSelect = false;
730
KListView::keyReleaseEvent( e );
733
bool DataTableBox::hasSelection()
735
QListViewItemIterator it( this, QListViewItemIterator::Selected );
739
DataTableBox::ItemList DataTableBox::selectedItems()
743
for ( QListViewItemIterator it( this, QListViewItemIterator::Selected ); it.current(); ++it )
744
l.append( static_cast<Item *>( *it ) );
749
void DataTableBox::setSingleItem( QListViewItem *item )
751
KListView::setCurrentItem( item );
754
void DataTableBox::slotWidgetChanged()
756
// Don't update while the mouse is pressed down.
758
if ( m_doingMultiSelect )
761
ItemList items = selectedItems();
762
m_hasSelection = !items.isEmpty();
764
DataTableList dataTables;
765
DataReportList dataReports;
766
for ( ItemList::ConstIterator it = items.begin(); it != items.end(); ++it )
768
if ( DataTable * dataTable = dynamic_cast<DataTable*>( ( *it ) ->itemWidget() ) )
769
dataTables.append( dataTable );
770
else if ( DataReport * dataReport = dynamic_cast<DataReport*>( ( *it ) ->itemWidget() ) )
771
dataReports.append( dataReport );
774
bool singleDataTable = dataTables.count() == 1;
775
bool singleDataReport = dataReports.count() == 1;
777
if ( ( dataTables.isEmpty() || !singleDataTable )
778
&& ( dataReports.isEmpty() || !singleDataReport ) )
780
static_cast<DataKiosk*>( widget ) ->partManager() ->setActivePart( 0L ); // sets as the active part
781
dataTableStack() ->raiseWidget( 0 );
782
action( "edit_table" ) ->setEnabled( false );
783
action( "add_virtual" ) ->setEnabled( false );
784
action( "table_up" ) ->setEnabled( false );
785
action( "table_down" ) ->setEnabled( false );
786
action( "remove_table" ) ->setEnabled( false );
787
action( "create_childtable" ) ->setEnabled( false );
788
action( "create_search" ) ->setEnabled( false );
789
action( "create_report" ) ->setEnabled( false );
790
action( "edit_search" ) ->setEnabled( false );
791
action( "remove_search" ) ->setEnabled( false );
792
action( "edit_report" ) ->setEnabled( false );
793
action( "refresh_report" ) ->setEnabled( false );
794
action( "remove_report" ) ->setEnabled( false );
795
action( "print" ) ->setEnabled( false );
797
else if ( singleDataTable )
799
static_cast<DataKiosk*>( widget ) ->partManager() ->setActivePart( 0L );
800
dataTableStack() ->raiseWidget( dataTables.front() );
801
action( "edit_table" ) ->setEnabled( true );
802
action( "add_virtual" ) ->setEnabled( true );
803
action( "table_up" ) ->setEnabled( true );
804
action( "table_down" ) ->setEnabled( true );
805
action( "remove_table" ) ->setEnabled( true );
806
action( "create_childtable" ) ->setEnabled( true );
807
action( "create_search" ) ->setEnabled( true );
808
action( "create_report" ) ->setEnabled( true );
809
action( "edit_report" ) ->setEnabled( false );
810
action( "refresh_report" ) ->setEnabled( false );
811
action( "remove_report" ) ->setEnabled( false );
812
action( "print" ) ->setEnabled( false );
814
else if ( singleDataReport )
816
for ( DataReport * report = m_dataReports.first(); report; report = m_dataReports.next() )
817
report ->setAsActiveReport( false );
819
DataReport * report = dataReports.front();
820
report ->setAsActiveReport( true );
822
static_cast<DataKiosk*>( widget ) ->partManager() ->setActivePart( report->kugarPart() );
823
dataTableStack() ->raiseWidget( report );
824
// if ( report->needsRefresh() )
825
// report->refreshReport();
826
action( "edit_table" ) ->setEnabled( false );
827
action( "add_virtual" ) ->setEnabled( false );
828
action( "table_up" ) ->setEnabled( false );
829
action( "table_down" ) ->setEnabled( false );
830
action( "remove_table" ) ->setEnabled( false );
831
action( "create_childtable" ) ->setEnabled( false );
832
action( "create_search" ) ->setEnabled( false );
833
action( "create_report" ) ->setEnabled( false );
834
action( "edit_search" ) ->setEnabled( false );
835
action( "remove_search" ) ->setEnabled( false );
836
action( "edit_report" ) ->setEnabled( true );
837
action( "refresh_report" ) ->setEnabled( true );
838
action( "remove_report" ) ->setEnabled( true );
839
action( "print" ) ->setEnabled( report->isInitialized() );
843
void DataTableBox::slotShowContextMenu( QListViewItem *item, const QPoint &point, int )
845
Item * i = static_cast<Item*>( item );
848
if ( dynamic_cast<DataTable*>( i->itemWidget() ) )
849
m_listMenu->popup( point );
850
else if ( dynamic_cast<DataReport*>( i->itemWidget() ) )
851
m_reportMenu->popup( point );
854
void DataTableBox::slotSetViewMode( int index )
856
if ( index == m_viewModeIndex )
859
viewMode() ->setShown( false );
860
m_viewModeIndex = index;
861
viewMode() ->setShown( true );
863
// The following call only does anything if the setup
864
// hasn't already been performed.
866
performTreeViewSetup();
869
void DataTableBox::setupItem( Item *item )
871
m_dataTableDict.insert( item->itemWidget(), item );
872
viewMode() ->queueRefresh();
875
void DataTableBox::performTreeViewSetup()
877
if ( m_treeViewSetup || m_viewModeIndex != 2 )
880
m_treeViewSetup = true;
883
DataTableBox::Item *DataTableBox::Item::m_collectionItem = 0;
885
DataTableBox::Item::Item( DataTableBox *listBox, const QString &icon, const QString &text, QWidget *l )
886
: QObject( listBox, text.ascii() ), KListViewItem( listBox, text ),
887
m_widget( l ), m_text( text ), m_iconName( icon )
892
DataTableBox::Item::Item( Item *parent, const QString &icon, const QString &text, QWidget *l )
893
: QObject( parent->listView(), text.ascii() ), KListViewItem( parent, text ),
894
m_widget( l ), m_text( text ), m_iconName( icon )
899
DataTableBox::Item::~Item()
901
emit itemDestroyed( this );
904
int DataTableBox::Item::compare( QListViewItem *i, int col, bool ) const
906
DataTable* thisIsDataTable = dynamic_cast<DataTable*>( itemWidget() );
907
DataTable* thatIsDataTable = dynamic_cast<DataTable*>( static_cast<Item *>( i ) ->itemWidget() );
909
if ( thisIsDataTable && !thatIsDataTable )
911
else if ( !thisIsDataTable && thatIsDataTable )
913
else if ( thisIsDataTable && thatIsDataTable )
915
if ( thisIsDataTable->number() < thatIsDataTable->number() )
917
else if ( thisIsDataTable->number() > thatIsDataTable->number() )
921
return text( col ).lower().localeAwareCompare( i->text( col ).lower() );
924
void DataTableBox::Item::paintCell( QPainter *painter, const QColorGroup &colorGroup, int column, int width, int align )
926
DataTableBox * dataTableBox = static_cast<DataTableBox *>( listView() );
927
dataTableBox->viewMode() ->paintCell( this, painter, colorGroup, column, width, align );
930
void DataTableBox::Item::setText( int column, const QString &text )
933
KListViewItem::setText( column, text );
936
void DataTableBox::Item::setup()
938
listView() ->viewMode() ->setupItem( this );
941
void DataTableBox::Item::repaintRequested()
943
/* kdDebug() << "repaintRequested" << dataTable()->numRows() << endl;*/
944
listView() ->viewMode() ->queueRefresh();
948
void DataTableBox::Item::slotSetName( const QString &name )
956
listView() ->ensureItemVisible( listView() ->currentItem() );
957
listView() ->viewMode() ->queueRefresh();
961
void DataTableBox::Item::init()
963
DataTableBox * list = listView();
965
list->setupItem( this );
967
setDragEnabled( false );
968
setDropEnabled( false );
970
int iconSize = list->viewModeIndex() == 0 ? 32 : 16;
971
setPixmap( 0, SmallIcon( m_iconName, iconSize ) );
972
list->addName( m_text );
976
connect( m_widget, SIGNAL( destroyed() ), this, SLOT( deleteLater() ) );
984
#include "datatablebox.moc"