LUMIERA.clone/src/gui/widget/timeline/timeline-tool.hpp
Ichthyostega 48e9b7594a Doxygen: identify all files lacking a @file comment
reason is, only files with a @file comment will be processed
with further documentation commands. For this reason, our Doxygen
documentation is lacking a lot of entries.

HOWTO:
find src -type f \( -name '*.cpp' -or -name '*.hpp' \) -not -exec egrep -q '\*.+@file' {} \; -print -exec sed -i -r -e'\_\*/_,$ { 1,+0 a\
\
\
/** @file §§§\
 ** TODO §§§\
 */
}' {} \;
2016-11-03 18:20:10 +01:00

151 lines
4 KiB
C++

/*
TIMELINE-TOOL.hpp - base of timeline selection tools
Copyright (C) Lumiera.org
2008, Joel Holdsworth <joel@airwebreathe.org.uk>
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., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/** @file §§§
** TODO §§§
*/
#ifndef GUI_WIDGET_TIMELINE_TOOL_H
#define GUI_WIDGET_TIMELINE_TOOL_H
#include "gui/gtk-lumiera.hpp"
namespace gui {
namespace widget {
class TimelineWidget;
namespace timeline {
class TimelineBody;
class TimelineState;
class TimelineViewWindow;
/**
* the types of different timeline tools.
*/
enum ToolType {
None,
Arrow,
IBeam
};
/**
* The base class of all timeline tools.
*/
class Tool
{
protected:
Tool (TimelineBody& owner);
public:
virtual ~Tool() {}; ///< this is an ABC
/**
* Gets the type of tool represented by this class.
* @remarks This must be implemented by all timeline tool classes.
*/
virtual ToolType get_type() const = 0;
/**
* Re-applies the cursor for the current tool at the current moment.
*/
bool apply_cursor();
public: /* ===== Event Handlers ===== */
/**
* The event handler for button press events.
* @remarks This can be overridden by the derived classes, but
* Tool::on_button_press_event must be called <b>at the start</b>
* of the derived class's override.
*/
virtual void on_button_press_event (GdkEventButton* event);
/**
* The event handler for button release events.
* @remarks This can be overridden by the derived classes, but
* Tool::on_button_release_event must be called <b>at the end</b> of
* the derived class's override.
*/
virtual void on_button_release_event (GdkEventButton* event);
/**
* The event handler for mouse move events.
* @remarks This can be overridden by the derived classes, but
* Tool::on_motion_notify_event must be called <b>at the start</b> of
* the derived class's override.
*/
virtual void on_motion_notify_event (GdkEventMotion *event);
protected: /* ===== Internal Overrides ===== */
/**
* Gets the cursor to display for this tool at this moment.
* @remarks This must be implemented by all timeline tool classes.
*/
virtual Glib::RefPtr<Gdk::Cursor> get_cursor() const = 0;
protected: /* ===== Utilities ===== */
/**
* Helper function which retrieves the pointer to owner timeline
* widget object, which is the owner of the timeline body.
*/
gui::widget::TimelineWidget &get_timeline_widget() const;
/**
* Helper function which retrieves the rectangle of the timeline
* body.
*/
Gdk::Rectangle get_body_rectangle() const;
/**
* A helper function to get the state
*/
shared_ptr<TimelineState> get_state() const;
/**
* A helper function to get the view window
*/
TimelineViewWindow& view_window() const;
protected:
TimelineBody &timelineBody;
bool isDragging;
Gdk::Point mousePoint;
};
}}}// namespace gui::widget::timeline
#endif /*GUI_WIDGET_TIMELINE_TOOL_H*/