summaryrefslogtreecommitdiffstats
path: root/src/ui/dialog/object-properties.h
blob: a1974c02d7a65975f051cc6fd7fbde6330716607 (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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
// SPDX-License-Identifier: GPL-2.0-or-later
/**
 * @file Object properties dialog.
 */
/*
 * Inkscape, an Open Source vector graphics editor
 *
 * 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.
 *
 * Copyright (C) 2012 Kris De Gussem <Kris.DeGussem@gmail.com>
 * c++version based on former C-version (GPL v2+) with authors:
 *   Lauris Kaplinski <lauris@kaplinski.com>
 *   bulia byak <buliabyak@users.sf.net>
 *   Johan Engelen <goejendaagh@zonnet.nl>
 *   Abhishek Sharma
 */

#ifndef SEEN_DIALOGS_ITEM_PROPERTIES_H
#define SEEN_DIALOGS_ITEM_PROPERTIES_H

#include "ui/widget/panel.h"
#include "ui/widget/frame.h"

#include <gtkmm/checkbutton.h>
#include <gtkmm/entry.h>
#include <gtkmm/expander.h>
#include <gtkmm/frame.h>
#include <gtkmm/spinbutton.h>
#include <gtkmm/textview.h>
#include <gtkmm/comboboxtext.h>

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

class SPAttributeTable;
class SPDesktop;
class SPItem;

namespace Gtk {
class Grid;
}

namespace Inkscape {
namespace UI {
namespace Dialog {

/**
 * A dialog widget to show object properties.
 *
 * A widget to enter an ID, label, title and description for an object.
 * In addition it allows to edit the properties of an object.
 */
class ObjectProperties : public Widget::Panel {
public:
    ObjectProperties();
    ~ObjectProperties() override;
    
    static ObjectProperties &getInstance() { return *new ObjectProperties(); }
    
    /// Updates entries and other child widgets on selection change, object modification, etc.
    void update();

private:
    bool _blocked;
    SPItem *_current_item; //to store the current item, for not wasting resources
    std::vector<Glib::ustring> _int_attrs;
    std::vector<Glib::ustring> _int_labels;

    Gtk::Label _label_id; //the label for the object ID
    Gtk::Entry _entry_id; //the entry for the object ID
    Gtk::Label _label_label; //the label for the object label
    Gtk::Entry _entry_label; //the entry for the object label
    Gtk::Label _label_title; //the label for the object title
    Gtk::Entry _entry_title; //the entry for the object title

    Gtk::Label _label_image_rendering; // the label for 'image-rendering'
    Gtk::ComboBoxText _combo_image_rendering; // the combo box text for 'image-rendering'
    
    Gtk::Frame  _ft_description; //the frame for the text of the object description
    Gtk::TextView _tv_description; //the text view object showing the object description

    Gtk::CheckButton _cb_hide; //the check button hide
    Gtk::CheckButton _cb_lock; //the check button lock
    Gtk::CheckButton _cb_aspect_ratio; //the preserve aspect ratio of images

    Gtk::Label _label_dpi; //the entry for the dpi value
    Gtk::SpinButton _spin_dpi; //the expander for interactivity
    Gtk::Expander _exp_interactivity; //the expander for interactivity
    SPAttributeTable *_attr_table; //the widget for showing the on... names at the bottom
    
    SPDesktop *_desktop;
    DesktopTracker _desktop_tracker;
    sigc::connection _desktop_changed_connection;
    sigc::connection _selection_changed_connection;
    sigc::connection _subselection_changed_connection;
    
    /// Constructor auxiliary function creating the child widgets.
    void _init();

    /// Sets object properties (ID, label, title, description) on user input.
    void _labelChanged();

    /// Callback for 'image-rendering'.
    void _imageRenderingChanged();

    /// Callback for checkbox Lock.
    void _sensitivityToggled();

    /// Callback for checkbox Hide.
    void _hiddenToggled();

    /// Callback for checkbox Preserve Aspect Ratio.
    void _aspectRatioToggled();

    /// 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 :