summaryrefslogtreecommitdiffstats
path: root/kio/kfile/kcombiview.h
blob: 3597669ea5ce22214b694c4867eaa0972fb26da4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
/*  -*- c++ -*-
    This file is part of the KDE libraries
    Copyright (C) 1998 Stephan Kulow <[email protected]>
                  1998 Daniel Grana <[email protected]>

    This library is free software; you can redistribute it and/or
    modify it under the terms of the GNU Library General Public
    License as published by the Free Software Foundation; either
    version 2 of the License, or (at your option) any later version.

    This library is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Library General Public License for more details.

    You should have received a copy of the GNU Library General Public License
    along with this library; see the file COPYING.LIB.  If not, write to
    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
    Boston, MA 02110-1301, USA.
*/

#ifndef _KCOMBIVIEW_H
#define _KCOMBIVIEW_H

#include <tqsplitter.h>
#include <klocale.h>

#include <kfile.h>
#include <kfileview.h>

class KFileIconView;
class QEvent;
class QIconViewItem;

/**
 * This view is designed to combine two KFileViews into one widget, to show
 * directories on the left side and files on the right side.
 *
 * Methods like selectedItems() to query status _only_ work on the right side,
 * i.e. on the files.
 *
 * After creating the KCombiView, you need to supply the view shown in the
 * right, (see setRight()). Available KFileView implementations are
 * KFileIconView and KFileDetailView.
 *
 * Most of the below methods are just implementations of the baseclass
 * KFileView, so look there for documentation.
 *
 * @see KFileView
 * @see KFileIconView
 * @see KFileDetailView
 * @see KDirOperator
 */
class KIO_EXPORT KCombiView : public TQSplitter,
		   public KFileView
{
    Q_OBJECT

public:
    KCombiView( TQWidget *parent, const char *name);
    virtual ~KCombiView();

    virtual TQWidget *widget() { return this; }
    virtual void clearView();

    virtual void updateView( bool );
    virtual void updateView(const KFileItem*);
    virtual void removeItem( const KFileItem * );
    virtual void listingCompleted();

    /**
     * Sets the view to be shown in the right. You need to call this before
     * doing anything else with this widget.
     */
    void setRight(KFileView *view);

    virtual void setSelectionMode( KFile::SelectionMode sm );

    virtual void setSelected(const KFileItem *, bool);
    virtual bool isSelected( const KFileItem * ) const;
    virtual void clearSelection();
    virtual void selectAll();
    virtual void invertSelection();

    virtual void setCurrentItem( const KFileItem * );
    virtual KFileItem * currentFileItem() const;
    virtual KFileItem * firstFileItem() const;
    virtual KFileItem * nextItem( const KFileItem * ) const;
    virtual KFileItem * prevItem( const KFileItem * ) const;

    virtual void insertItem( KFileItem *i );
    virtual void clear();

    virtual void setSorting( TQDir::SortSpec sort );

    virtual void readConfig( KConfig *, const TQString& group = TQString::null );
    virtual void writeConfig( KConfig *, const TQString& group = TQString::null);

    void ensureItemVisible( const KFileItem * );

    virtual KActionCollection * actionCollection() const;

    virtual void setAcceptDrops(bool b);

protected:
    KFileIconView *left;
    KFileView *right;

protected slots:
    void slotSortingChanged( TQDir::SortSpec );

private:
    KFileView *focusView( KFileView *preferred ) const;

    // in nextItem() and prevItem(), we have to switch views, when the first
    // view returns 0L. So we need to remember which view was used in the
    // previous call to next/prevItem(). Yes, it's a hack, but it works for
    // some cases at least.
    mutable KFileView *m_lastViewForNextItem;
    mutable KFileView *m_lastViewForPrevItem;

protected:
    virtual bool eventFilter( TQObject *o, TQEvent *e );
    void setDropOptions_impl(int options);

    virtual void virtual_hook( int id, void* data );
private:
    class KCombiViewPrivate;
    KCombiViewPrivate *d;

};

#endif