~ubuntu-branches/ubuntu/precise/koffice/precise

« back to all changes in this revision

Viewing changes to libs/widgets/KoResourceItemChooser.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Jonathan Riddell
  • Date: 2010-09-21 15:36:35 UTC
  • mfrom: (1.4.1 upstream) (60.2.11 maverick)
  • Revision ID: james.westby@ubuntu.com-20100921153635-6tejqkiro2u21ydi
Tags: 1:2.2.2-0ubuntu3
Add kubuntu_03_fix-crash-on-closing-sqlite-connection-2.2.2.diff and
kubuntu_04_support-large-memo-values-for-msaccess-2.2.2.diff as
recommended by upstream http://kexi-
project.org/wiki/wikiview/index.php@Kexi2.2_Patches.html#sqlite_stab
ility

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* This file is part of the KDE project
 
2
   Copyright (c) 2002 Patrick Julien <freak@codepimps.org>
 
3
   Copyright (c) 2007 Jan Hambrecht <jaham@gmx.net>
 
4
   Copyright (c) 2007 Sven Langkamp <sven.langkamp@gmail.com>
 
5
 
 
6
   This library is free software; you can redistribute it and/or
 
7
   modify it under the terms of the GNU Library General Public
 
8
   License as published by the Free Software Foundation; either
 
9
   version 2 of the License, or (at your option) any later version.
 
10
 
 
11
   This library is distributed in the hope that it will be useful,
 
12
   but WITHOUT ANY WARRANTY; without even the implied warranty of
 
13
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 
14
   Library General Public License for more details.
 
15
 
 
16
   You should have received a copy of the GNU Library General Public License
 
17
   along with this library; see the file COPYING.LIB.  If not, write to
 
18
   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 
19
 * Boston, MA 02110-1301, USA.
 
20
*/
 
21
#include "KoResourceItemChooser.h"
 
22
 
 
23
#include <QGridLayout>
 
24
#include <QButtonGroup>
 
25
#include <QPushButton>
 
26
#include <QHeaderView>
 
27
#include <QAbstractProxyModel>
 
28
 
 
29
#include <kfiledialog.h>
 
30
#include <kiconloader.h>
 
31
#include <klocale.h>
 
32
#include <kdebug.h>
 
33
 
 
34
#include "KoResourceServerAdapter.h"
 
35
#include "KoResourceItemView.h"
 
36
#include "KoResourceItemDelegate.h"
 
37
#include "KoResourceModel.h"
 
38
#include "KoResource.h"
 
39
 
 
40
class KoResourceItemChooser::Private
 
41
{
 
42
public:
 
43
    Private() : model(0), view(0), buttonGroup(0) {}
 
44
    KoResourceModel* model;
 
45
    KoResourceItemView* view;
 
46
    QButtonGroup* buttonGroup;
 
47
};
 
48
 
 
49
KoResourceItemChooser::KoResourceItemChooser( KoAbstractResourceServerAdapter * resourceAdapter, QWidget *parent )
 
50
 : QWidget( parent ), d( new Private() )
 
51
{
 
52
    Q_ASSERT(resourceAdapter);
 
53
    d->model = new KoResourceModel(resourceAdapter, this);
 
54
    d->view = new KoResourceItemView(this);
 
55
    d->view->setModel(d->model);
 
56
    d->view->setItemDelegate( new KoResourceItemDelegate( this ) );
 
57
    d->view->setSelectionMode( QAbstractItemView::SingleSelection );
 
58
    connect( d->view, SIGNAL(activated( const QModelIndex & ) ),
 
59
             this, SLOT(activated ( const QModelIndex & ) ) );
 
60
 
 
61
    d->buttonGroup = new QButtonGroup( this );
 
62
    d->buttonGroup->setExclusive( false );
 
63
 
 
64
    QGridLayout* layout = new QGridLayout( this );
 
65
    layout->addWidget( d->view, 0, 0, 1, 3 );
 
66
 
 
67
    QPushButton *button = new QPushButton( this );
 
68
    button->setIcon( SmallIcon( "list-add" ) );
 
69
    button->setToolTip( i18n("Import") );
 
70
    button->setEnabled( true );
 
71
    d->buttonGroup->addButton( button, Button_Import );
 
72
    layout->addWidget( button, 1, 0 );
 
73
 
 
74
    button = new QPushButton( this );
 
75
    button->setIcon( SmallIcon( "list-remove" ) );
 
76
    button->setToolTip( i18n("Delete") );
 
77
    button->setEnabled( false );
 
78
    d->buttonGroup->addButton( button, Button_Remove );
 
79
    layout->addWidget( button, 1, 1 );
 
80
 
 
81
    connect( d->buttonGroup, SIGNAL( buttonClicked( int ) ), this, SLOT( slotButtonClicked( int ) ));
 
82
 
 
83
    layout->setColumnStretch( 0, 1 );
 
84
    layout->setColumnStretch( 1, 1 );
 
85
    layout->setColumnStretch( 2, 2 );
 
86
    layout->setSpacing( 0 );
 
87
    layout->setMargin( 3 );
 
88
 
 
89
    updateRemoveButtonState();
 
90
}
 
91
 
 
92
KoResourceItemChooser::~KoResourceItemChooser()
 
93
{
 
94
    delete d;
 
95
}
 
96
 
 
97
void KoResourceItemChooser::slotButtonClicked( int button )
 
98
{
 
99
    if( button == Button_Import ) {
 
100
        QString extensions = d->model->resourceServerAdapter()->extensions();
 
101
        QString filter = extensions.replace(QString(":"), QString(" "));
 
102
        QString filename = KFileDialog::getOpenFileName( KUrl(), filter, 0, i18n( "Choose File to Add" ) );
 
103
 
 
104
        d->model->resourceServerAdapter()->importResourceFile(filename);
 
105
    }
 
106
    else if( button == Button_Remove ) {
 
107
        QModelIndex index = d->view->currentIndex();
 
108
        if( index.isValid() ) {
 
109
 
 
110
            KoResource * resource = resourceFromModelIndex(index);
 
111
            if( resource ) {
 
112
                d->model->resourceServerAdapter()->removeResource(resource);
 
113
            }
 
114
        }
 
115
    }
 
116
    updateRemoveButtonState();
 
117
}
 
118
 
 
119
void KoResourceItemChooser::showButtons( bool show )
 
120
{
 
121
    foreach( QAbstractButton * button, d->buttonGroup->buttons() )
 
122
        show ? button->show() : button->hide();
 
123
}
 
124
 
 
125
void KoResourceItemChooser::setColumnCount( int columnCount )
 
126
{
 
127
    d->model->setColumnCount( columnCount );
 
128
}
 
129
 
 
130
void KoResourceItemChooser::setRowHeight( int rowHeight )
 
131
{
 
132
    d->view->verticalHeader()->setDefaultSectionSize( rowHeight );
 
133
}
 
134
 
 
135
void KoResourceItemChooser::setItemDelegate( QAbstractItemDelegate * delegate )
 
136
{
 
137
    d->view->setItemDelegate(delegate);
 
138
}
 
139
 
 
140
KoResource *  KoResourceItemChooser::currentResource()
 
141
{
 
142
    QModelIndex index = d->view->currentIndex();
 
143
    if( index.isValid() )
 
144
        return resourceFromModelIndex(index);
 
145
 
 
146
    return 0;
 
147
}
 
148
 
 
149
void KoResourceItemChooser::setCurrentItem(int row, int column)
 
150
{
 
151
    QModelIndex index = d->model->index(row, column);
 
152
    if( !index.isValid() )
 
153
        return;
 
154
 
 
155
    d->view->setCurrentIndex(index);
 
156
}
 
157
 
 
158
void KoResourceItemChooser::setProxyModel( QAbstractProxyModel* proxyModel )
 
159
{
 
160
    proxyModel->setSourceModel(d->model);
 
161
    d->view->setModel(proxyModel);
 
162
}
 
163
 
 
164
void KoResourceItemChooser::activated( const QModelIndex & index )
 
165
{
 
166
    if( ! index.isValid() )
 
167
        return;
 
168
 
 
169
    KoResource * resource = resourceFromModelIndex(index);
 
170
 
 
171
    if( resource ) {
 
172
        emit resourceSelected( resource );
 
173
    }
 
174
    updateRemoveButtonState();
 
175
}
 
176
 
 
177
void KoResourceItemChooser::updateRemoveButtonState()
 
178
{
 
179
    QAbstractButton * removeButton = d->buttonGroup->button( Button_Remove );
 
180
    if( ! removeButton )
 
181
        return;
 
182
 
 
183
    KoResource * resource = currentResource();
 
184
    if( resource ) {
 
185
        removeButton->setEnabled( resource->removable() );
 
186
        return;
 
187
    }
 
188
 
 
189
    removeButton->setEnabled( false );
 
190
}
 
191
 
 
192
KoResource* KoResourceItemChooser::resourceFromModelIndex(const QModelIndex& index)
 
193
{
 
194
    if(!index.isValid())
 
195
        return 0;
 
196
    
 
197
    const QAbstractProxyModel* proxyModel = dynamic_cast<const QAbstractProxyModel*>(index.model());
 
198
    if(proxyModel) {
 
199
        //Get original model index, because proxy models destroy the internalPointer
 
200
        QModelIndex originalIndex = proxyModel->mapToSource(index);
 
201
        return static_cast<KoResource*>( originalIndex.internalPointer() );
 
202
    }
 
203
 
 
204
    return static_cast<KoResource*>( index.internalPointer() );
 
205
}
 
206
 
 
207
 
 
208
#include <KoResourceItemChooser.moc>