library/forms/mforms/dockingpoint.h (72 lines of code) (raw):
/*
* Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License, version 2.0,
* as published by the Free Software Foundation.
*
* This program is designed to work with certain software (including
* but not limited to OpenSSL) that is licensed under separate terms, as
* designated in a particular file or component or in included license
* documentation. The authors of MySQL hereby grant you an additional
* permission to link the program and your derivative works with the
* separately licensed software that they have either included with
* the program or referenced in the documentation.
* 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, version 2.0, 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 St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#pragma once
#include <map>
#include "mforms/base.h"
#include "base/geometry.h"
#include "base/drawing.h"
#include <boost/signals2.hpp>
namespace mforms {
class AppView;
class DockingPoint;
#ifndef DOXYGEN_SHOULD_SKIP_THIS
#ifndef SWIG
class MFORMS_EXPORT DockingPointDelegate {
friend class DockingPoint;
protected:
DockingPoint *_dpoint;
public:
virtual ~DockingPointDelegate(){};
virtual std::string get_type() = 0;
virtual void set_name(const std::string &name) = 0;
virtual void dock_view(AppView *view, const std::string &arg1, int arg2) = 0;
virtual bool select_view(AppView *view) = 0;
virtual void undock_view(AppView *view) = 0;
virtual void set_view_title(AppView *view, const std::string &title) = 0;
virtual std::pair<int, int> get_size() = 0;
virtual AppView *selected_view() = 0;
virtual int view_count() = 0;
virtual AppView *view_at_index(int index) = 0;
};
#endif
#endif
/** Proxy class for interfacing with host application windows.
Provides some utility functions to perform certain actions in windows
of the host application.
*/
class MFORMS_EXPORT DockingPoint : public Object {
friend class AppView; // for set_view_title().
protected:
DockingPoint() : _delegate(nullptr), _delete_delegate(false) {
}
public:
#ifndef SWIG
DockingPoint(DockingPointDelegate *delegate, bool delete_on_destroy);
#endif
public:
~DockingPoint();
std::string get_type();
/** Set component name, used mainly for a11y
*/
void set_name(const std::string &name);
/** Docks an AppView into a view belonging to the application, at the requested position.
@param view - an AppView object to be docked in the target
@param arg1 - target specific string argument
@param arg2 - target specific int argument
In Workbench, view will be added into one of the tabs in the application window.
*/
void dock_view(AppView *view, const std::string &arg1 = "", int arg2 = 0);
/** Selects a docked view.
@return false if a view with the identifier could not be found. identifier
must be set in the AppView before its docked.
*/
bool select_view(AppView *view);
/** Returns the currently selected view
Note that a return value of NULL may just mean that the selected tab is not an AppView.
*/
AppView *selected_view();
/** Undocks an AppView from the main window. */
void undock_view(AppView *view);
/* Closes the view at the given index if it exists and is an appview. */
void close_view_at_index(int index);
/** Checks if all docked views can be closed and if so closes them. Returns true if all of them could be closed. */
bool close_all_views();
/** Gets the size of the view. */
std::pair<int, int> get_size();
/** Gets the number of AppViews docked */
virtual int view_count();
/** Gets the AppView docket at the given index */
virtual AppView *view_at_index(int index);
#ifndef SWIG
DockingPointDelegate *get_delegate() {
return _delegate;
}
boost::signals2::signal<void()> *signal_view_switched() {
return &_view_switched;
}
boost::signals2::signal<void(AppView *)> *signal_view_undocked() {
return &_view_undocked;
}
void view_switched();
#endif
protected:
DockingPointDelegate *_delegate;
boost::signals2::signal<void()> _view_switched;
boost::signals2::signal<void(AppView *)> _view_undocked;
bool _delete_delegate;
void set_view_title(AppView *view, const std::string &title);
};
};