summaryrefslogtreecommitdiffstats
path: root/src/ui/dialog/object-attributes.h
blob: a1264b8cffef10c5fa6f2fb3cc699c8c2b29e523 (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
/** @file
 * Generic object attribute editor
 */
/* 
 * Inkscape, an Open Source vector graphics editor
 * Copyright (C) 2012 Kris De Gussem <Kris.DeGussem@gmail.com>
 * 
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 * 
 * This program 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 General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 */

#ifndef SEEN_DIALOGS_OBJECT_ATTRIBUTES_H
#define SEEN_DIALOGS_OBJECT_ATTRIBUTES_H

#include "ui/dialog/desktop-tracker.h"
#include "ui/widget/panel.h"

class SPAttributeTable;

namespace Inkscape {
namespace UI {
namespace Dialog {

/**
 * A dialog widget to show object attributes (currently for images and links).
 */
class ObjectAttributes : public Widget::Panel {
public:
    ObjectAttributes ();
    ~ObjectAttributes () override;
    
    /**
     * Returns a new instance of the object attributes dialog.
     * 
	 * Auxiliary function needed by the DialogManager.
     */
    static ObjectAttributes &getInstance() { return *new ObjectAttributes(); }
    
    /**
     * Updates entries and other child widgets on selection change, object modification, etc.
     */
    void widget_setup();

private:
    /**
     * Is UI update bloched?
     */
    bool blocked;
    
    /**
     * Contains a pointer to the currently selected item (NULL in case nothing is or multiple objects are selected).
     */
    SPItem *CurrentItem;
    
    /**
     * Child widget to show the object attributes.
     * 
     * attrTable makes the labels and edit boxes for the attributes defined
     * in the SPAttrDesc arrays at the top of the cpp-file. This widgets also
     * ensures object attribute modifications by the user are set.
     */
    SPAttributeTable *attrTable;
    
    /**
     * Stores the current desktop.
     */
    SPDesktop *desktop;
    
    /**
     * Auxiliary widget to keep track of desktop changes for the floating dialog.
     */
    DesktopTracker deskTrack;
    
    /**
     * Link to callback function for a change in desktop (window).
     */
    sigc::connection desktopChangeConn;
    
    /**
     * Link to callback function for a selection change.
     */
    sigc::connection selectChangedConn;
    sigc::connection subselChangedConn;
    
    /**
     * Link to callback function for a modification of the selected object.
     */
    sigc::connection selectModifiedConn;
    
    /**
     * Callback function invoked by the desktop tracker in case of a modification of the selected object.
     */
    void selectionModifiedCB( guint flags );
    
    /*
     * Can be invoked for setting the desktop. Currently not used.
     */
    // void setDesktop(SPDesktop *desktop);
    
    /**
     * Is invoked by the desktop tracker when the desktop changes.
     */
    void setTargetDesktop(SPDesktop *desktop);

};

}
}
}

#endif

/*
  Local Variables:
  mode:c++
  c-file-style:"stroustrup"
  c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
  indent-tabs-mode:nil
  fill-column:99
  End:
*/
// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :