#include <list>
#include <map>
#include <string>
#include <gdk/gdk.h>
#include <glib.h>
#include <gtk/gtk.h>
#include <scroom/presentationinterface.hh>
#include <scroom/scroominterface.hh>
#include "view.hh"
Go to the source code of this file.
|
| using | FileNameMap = std::map< std::string, std::list< std::string > > |
| |
|
| void | on_scroom_hide (GtkWidget *widget, gpointer user_data) |
| |
| void | on_new_activate (GtkMenuItem *menuitem, gpointer user_data) |
| |
| void | on_open_activate (GtkMenuItem *menuitem, gpointer user_data) |
| |
| void | on_save_activate (GtkMenuItem *menuitem, gpointer user_data) |
| |
| void | on_save_as_activate (GtkMenuItem *menuitem, gpointer user_data) |
| |
| void | on_quit_activate (GtkMenuItem *menuitem, gpointer user_data) |
| |
| void | on_cut_activate (GtkMenuItem *menuitem, gpointer user_data) |
| |
| void | on_copy_activate (GtkMenuItem *menuitem, gpointer user_data) |
| |
| void | on_paste_activate (GtkMenuItem *menuitem, gpointer user_data) |
| |
| void | on_delete_activate (GtkMenuItem *menuitem, gpointer user_data) |
| |
| void | on_fullscreen_activate (GtkMenuItem *menuitem, gpointer user_data) |
| |
| void | on_close_activate (GtkMenuItem *menuitem, gpointer user_data) |
| |
| void | on_about_activate (GtkMenuItem *menuitem, gpointer user_data) |
| |
| gboolean | on_drawingarea_expose_event (GtkWidget *widget, GdkEventExpose *event, gpointer user_data) |
| |
| gboolean | on_drawingarea_configure_event (GtkWidget *widget, GdkEventConfigure *event, gpointer user_data) |
| |
| gboolean | on_idle (gpointer user_data) |
| |
| void | on_done_loading_plugins () |
| |
| void | on_zoombox_changed (GtkComboBox *widget, gpointer user_data) |
| |
| void | on_scrollbar_value_changed (GtkAdjustment *adjustment, gpointer user_data) |
| |
| void | on_textbox_value_changed (GtkEditable *editable, gpointer user_data) |
| |
| void | on_scroom_bootstrap (const FileNameMap &newFilenames) |
| |
| void | on_scroom_terminating () |
| |
| void | find_or_create_scroom (const PresentationInterface::Ptr &presentation) |
| |
| void | create_scroom (const PresentationInterface::Ptr &presentation) |
| |
| void | on_newPresentationInterfaces_update (const std::map< NewPresentationInterface::Ptr, std::string > &newPresentationInterfaces) |
| |
| void | on_presentation_created (const PresentationInterface::Ptr &p) |
| |
| void | on_view_created (const View::Ptr &v) |
| |
| void | on_presentation_added_to_view (const View::Ptr &v) |
| |
| void | on_view_destroyed (View *v) |
| |
| void | on_new_presentationobserver (const PresentationObserver::Ptr &po) |
| |
| void | on_new_viewobserver (const ViewObserver::Ptr &viewObserver) |
| |
| void | on_presentation_possibly_destroyed () |
| |
| bool | in_devmode () |
| |
◆ FileNameMap
| using FileNameMap = std::map<std::string, std::list<std::string> > |
◆ create_scroom()
539 GtkBuilder* xml = gtk_builder_new();
540 boost::scoped_array<char*>
const obj{
new gchar*[2]};
541 const std::string str =
"scroom";
542 obj[0] =
const_cast<char*
>(str.c_str());
544 gtk_builder_add_objects_from_file(xml,
xmlFileName.c_str(), obj.get(),
nullptr);
548 spdlog::error(
"Opening xml failed");
559 GtkWidget* scroom = GTK_WIDGET(gtk_builder_get_object(xml,
"scroom"));
560 GtkWidget* openMenuItem = GTK_WIDGET(gtk_builder_get_object(xml,
"open"));
561 GtkWidget* closeMenuItem = GTK_WIDGET(gtk_builder_get_object(xml,
"close"));
562 GtkWidget* quitMenuItem = GTK_WIDGET(gtk_builder_get_object(xml,
"quit"));
563 GtkWidget* fullScreenMenuItem = GTK_WIDGET(gtk_builder_get_object(xml,
"fullscreen_menu_item"));
564 GtkWidget* aboutMenuItem = GTK_WIDGET(gtk_builder_get_object(xml,
"about"));
565 GtkWidget*
drawingArea = GTK_WIDGET(gtk_builder_get_object(xml,
"drawingarea"));
566 GtkWidget* zoomBox = GTK_WIDGET(gtk_builder_get_object(xml,
"zoomboxcombo"));
567 GtkWidget* vscrollbar = GTK_WIDGET(gtk_builder_get_object(xml,
"vscrollbar"));
568 GtkWidget* hscrollbar = GTK_WIDGET(gtk_builder_get_object(xml,
"hscrollbar"));
569 GtkAdjustment* vscrollbaradjustment = gtk_range_get_adjustment(GTK_RANGE(vscrollbar));
570 GtkAdjustment* hscrollbaradjustment = gtk_range_get_adjustment(GTK_RANGE(hscrollbar));
571 GtkEditable* xTextBox = GTK_EDITABLE(GTK_WIDGET(gtk_builder_get_object(xml,
"x_textbox")));
572 GtkEditable* yTextBox = GTK_EDITABLE(GTK_WIDGET(gtk_builder_get_object(xml,
"y_textbox")));
574 g_signal_connect(
static_cast<gpointer
>(scroom),
"hide", G_CALLBACK(
on_scroom_hide), view.get());
575 g_signal_connect(
static_cast<gpointer
>(closeMenuItem),
"activate", G_CALLBACK(
on_close_activate), view.get());
576 g_signal_connect(
static_cast<gpointer
>(quitMenuItem),
"activate", G_CALLBACK(
on_quit_activate), view.get());
577 g_signal_connect(
static_cast<gpointer
>(openMenuItem),
"activate", G_CALLBACK(
on_open_activate), scroom);
578 g_signal_connect(
static_cast<gpointer
>(fullScreenMenuItem),
"activate", G_CALLBACK(
on_fullscreen_activate), view.get());
579 g_signal_connect(
static_cast<gpointer
>(zoomBox),
"changed", G_CALLBACK(
on_zoombox_changed), view.get());
598 g_signal_connect(
static_cast<gpointer
>(aboutMenuItem),
"activate", G_CALLBACK(
on_about_activate), view.get());
606 char uriList[] =
"text/uri-list";
607 GtkTargetEntry targets[] = {{uriList, 0, 0}};
609 scroom, GTK_DEST_DEFAULT_ALL, targets, 1,
static_cast<GdkDragAction
>(GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK));
611 g_signal_connect(
static_cast<gpointer
>(scroom),
"drag_data_received", G_CALLBACK(
onDragDataReceived), NULL);
Referenced by find_or_create_scroom(), and on_scroom_bootstrap().
◆ find_or_create_scroom()
◆ in_devmode()
◆ on_about_activate()
| void on_about_activate |
( |
GtkMenuItem * |
menuitem, |
|
|
gpointer |
user_data |
|
) |
| |
◆ on_close_activate()
| void on_close_activate |
( |
GtkMenuItem * |
menuitem, |
|
|
gpointer |
user_data |
|
) |
| |
◆ on_copy_activate()
| void on_copy_activate |
( |
GtkMenuItem * |
menuitem, |
|
|
gpointer |
user_data |
|
) |
| |
◆ on_cut_activate()
| void on_cut_activate |
( |
GtkMenuItem * |
menuitem, |
|
|
gpointer |
user_data |
|
) |
| |
◆ on_delete_activate()
| void on_delete_activate |
( |
GtkMenuItem * |
menuitem, |
|
|
gpointer |
user_data |
|
) |
| |
◆ on_done_loading_plugins()
| void on_done_loading_plugins |
( |
| ) |
|
291 const std::string& file = fn.front();
296 catch(std::exception& ex)
298 spdlog::error(ex.what());
301 gchar* dir = g_path_get_dirname(file.c_str());
310 std::map<std::string, NewAggregateInterface::Ptr>
const& newAggregateInterfaces =
instance->getNewAggregateInterfaces();
312 for(FileNameMap::value_type
const& v:
filenames)
314 const std::string& aggregateName = v.first;
315 std::list<std::string>
const& files = v.second;
317 auto i = newAggregateInterfaces.find(aggregateName);
318 if(i != newAggregateInterfaces.end())
325 if(aggregatePresentation)
327 for(
const std::string& file: files)
330 aggregate->addPresentation(p);
338 spdlog::error(
"Don't know how to display a {}", aggregateName);
341 catch(std::exception& ex)
343 spdlog::error(
"While creating {}: {}", aggregateName, ex.what());
349 spdlog::error(
"Don't know how to create {}", aggregateName);
Referenced by PluginManager::doWork().
◆ on_drawingarea_configure_event()
| gboolean on_drawingarea_configure_event |
( |
GtkWidget * |
widget, |
|
|
GdkEventConfigure * |
event, |
|
|
gpointer |
user_data |
|
) |
| |
◆ on_drawingarea_expose_event()
| gboolean on_drawingarea_expose_event |
( |
GtkWidget * |
widget, |
|
|
GdkEventExpose * |
event, |
|
|
gpointer |
user_data |
|
) |
| |
248 cairo_region_t* re = cairo_region_create();
250 GdkDrawingContext* dc;
251 dc = gdk_window_begin_draw_frame(gtk_widget_get_window(widget), re);
253 cairo_t* cr = gdk_drawing_context_get_cairo_context(dc);
255 View* view =
static_cast<View*
>(user_data);
258 gdk_window_end_draw_frame(gtk_widget_get_window(widget), dc);
260 cairo_region_destroy(re);
Referenced by create_scroom().
◆ on_fullscreen_activate()
| void on_fullscreen_activate |
( |
GtkMenuItem * |
menuitem, |
|
|
gpointer |
user_data |
|
) |
| |
216 View* view =
static_cast<View*
>(user_data);
217 GtkCheckMenuItem* cmi = GTK_CHECK_MENU_ITEM(item);
218 const gboolean active = gtk_check_menu_item_get_active(cmi);
Referenced by create_scroom().
◆ on_idle()
| gboolean on_idle |
( |
gpointer |
user_data | ) |
|
◆ on_new_activate()
| void on_new_activate |
( |
GtkMenuItem * |
menuitem, |
|
|
gpointer |
user_data |
|
) |
| |
◆ on_new_presentationobserver()
721 po->presentationAdded(p);
◆ on_new_viewobserver()
◆ on_newPresentationInterfaces_update()
◆ on_open_activate()
| void on_open_activate |
( |
GtkMenuItem * |
menuitem, |
|
|
gpointer |
user_data |
|
) |
| |
115 auto* scroom =
static_cast<GtkWidget*
>(user_data);
117 spdlog::debug(
"Creating the open dialog");
118 dialog = gtk_file_chooser_dialog_new(
"Open File",
120 GTK_FILE_CHOOSER_ACTION_OPEN,
126 gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog),
currentFolder.c_str());
129 const auto& openInterfaces = pm->getOpenInterfaces();
130 const auto& openPresentationInterfaces = pm->getOpenPresentationInterfaces();
133 std::vector<GtkFileFilter*> filters;
134 GtkFileFilter* allSupportedFileTypesFilter = gtk_file_filter_new();
135 gtk_file_filter_set_name(allSupportedFileTypesFilter,
"Any supported file type");
138 auto filterFlags =
static_cast<GtkFileFilterFlags
>(GTK_FILE_FILTER_FILENAME | GTK_FILE_FILTER_MIME_TYPE
139 | GTK_FILE_FILTER_DISPLAY_NAME | GTK_FILE_FILTER_URI);
141 gtk_file_filter_add_custom(allSupportedFileTypesFilter, filterFlags, &
combinedFileFilter, &filters,
nullptr);
142 gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), allSupportedFileTypesFilter);
144 for(
auto const& cur: openPresentationInterfaces)
146 for(
auto const& f: cur.first->getFilters())
148 gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), f);
149 filters.push_back(f);
152 for(
auto const& cur: openInterfaces)
154 for(
auto const& f: cur.first->getFilters())
156 gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), f);
157 filters.push_back(f);
161 if(gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT)
163 GFile* file = g_file_new_for_path(gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)));
164 GFileInfo* fileInfo = g_file_query_info(file,
"standard::*", G_FILE_QUERY_INFO_NONE,
nullptr,
nullptr);
165 GtkFileFilterInfo filterInfo;
166 filterInfo.filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
167 filterInfo.mime_type = g_content_type_get_mime_type(g_file_info_get_content_type(fileInfo));
168 filterInfo.display_name = g_file_info_get_display_name(fileInfo);
169 filterInfo.contains =
170 static_cast<GtkFileFilterFlags
>(GTK_FILE_FILTER_FILENAME | GTK_FILE_FILTER_DISPLAY_NAME | GTK_FILE_FILTER_MIME_TYPE);
171 spdlog::debug(
"Opening file {}", filterInfo.filename);
177 catch(std::exception& ex)
179 spdlog::error(ex.what());
183 gchar* cf = gtk_file_chooser_get_current_folder(GTK_FILE_CHOOSER(dialog));
189 gtk_widget_destroy(dialog);
Referenced by create_scroom().
◆ on_paste_activate()
| void on_paste_activate |
( |
GtkMenuItem * |
menuitem, |
|
|
gpointer |
user_data |
|
) |
| |
◆ on_presentation_added_to_view()
| void on_presentation_added_to_view |
( |
const View::Ptr & |
v | ) |
|
◆ on_presentation_created()
◆ on_presentation_possibly_destroyed()
| void on_presentation_possibly_destroyed |
( |
| ) |
|
672 bool presentationDestroyed =
false;
679 presentationDestroyed =
true;
686 if(presentationDestroyed)
688 for(
auto const& p:
views)
690 p.first->on_presentation_destroyed();
693 const std::map<PresentationObserver::Ptr, std::string>& presentationObservers =
696 for(
auto const& p: presentationObservers)
698 p.first->presentationDeleted();
Referenced by on_done_loading_plugins(), on_open_activate(), and on_view_destroyed().
◆ on_quit_activate()
| void on_quit_activate |
( |
GtkMenuItem * |
menuitem, |
|
|
gpointer |
user_data |
|
) |
| |
◆ on_save_activate()
| void on_save_activate |
( |
GtkMenuItem * |
menuitem, |
|
|
gpointer |
user_data |
|
) |
| |
◆ on_save_as_activate()
| void on_save_as_activate |
( |
GtkMenuItem * |
menuitem, |
|
|
gpointer |
user_data |
|
) |
| |
◆ on_scrollbar_value_changed()
| void on_scrollbar_value_changed |
( |
GtkAdjustment * |
adjustment, |
|
|
gpointer |
user_data |
|
) |
| |
◆ on_scroom_bootstrap()
| void on_scroom_bootstrap |
( |
const FileNameMap & |
newFilenames | ) |
|
420 spdlog::info(
"Bootstrapping Scroom...");
427 spdlog::info(
"+----------------------------------------------------------------------+");
428 spdlog::info(
"| ENTERING DEVELOPMENT MODE |");
429 spdlog::info(
"| All the default directories are not searched |");
430 spdlog::info(
"| Instead, only environment variables and the local source tree |");
431 spdlog::info(
"| are consulted. |");
432 spdlog::info(
"+----------------------------------------------------------------------+");
445 xmlFileName = (boost::dll::program_location().parent_path() /
"scroom.glade").generic_string();
452 boost::scoped_array<gchar*>
const obj{
new gchar*[2]};
453 const std::string str =
"aboutDialog";
454 obj[0] =
const_cast<char*
>(str.c_str());
461 gtk_about_dialog_set_program_name(GTK_ABOUT_DIALOG(
aboutDialog),
"Scroom");
462 gtk_about_dialog_set_version(GTK_ABOUT_DIALOG(
aboutDialog), PACKAGE_VERSION);
464 g_signal_connect(G_OBJECT(
aboutDialog),
"activate-link", G_CALLBACK(on_open_scroom_website), NULL);
469 spdlog::error(
"Opening xml failed");
Referenced by main().
◆ on_scroom_hide()
| void on_scroom_hide |
( |
GtkWidget * |
widget, |
|
|
gpointer |
user_data |
|
) |
| |
◆ on_scroom_terminating()
| void on_scroom_terminating |
( |
| ) |
|
◆ on_textbox_value_changed()
| void on_textbox_value_changed |
( |
GtkEditable * |
editable, |
|
|
gpointer |
user_data |
|
) |
| |
◆ on_view_created()
◆ on_view_destroyed()
| void on_view_destroyed |
( |
View * |
v | ) |
|
◆ on_zoombox_changed()
| void on_zoombox_changed |
( |
GtkComboBox * |
widget, |
|
|
gpointer |
user_data |
|
) |
| |
◆ REGULAR_FILES
| const std::string REGULAR_FILES |
void unsetFullScreen()
Definition: view.cc:808
void on_presentation_possibly_destroyed()
Definition: callbacks.cc:670
static Ptr create(GtkBuilder *scroomXml, const PresentationInterface::Ptr &presentation)
Definition: view.cc:347
void find_or_create_scroom(const PresentationInterface::Ptr &presentation)
Definition: callbacks.cc:481
void load(GtkFileFilterInfo const &info)
Definition: loader.cc:238
void setFullScreen()
Definition: view.cc:801
boost::shared_ptr< R > shared_from_this()
Definition: utilities.hh:109
gboolean on_drawingarea_configure_event(GtkWidget *, GdkEventConfigure *, gpointer user_data)
Definition: callbacks.cc:265
boost::shared_ptr< PluginManager > Ptr
Definition: pluginmanager.hh:44
PresentationInterface::Ptr loadPresentation(const std::string &filename)
Definition: loader.cc:189
gboolean on_button_press_event(GtkWidget *, GdkEventButton *event, gpointer user_data)
Definition: callbacks.cc:380
void on_scroom_hide(GtkWidget *, gpointer user_data)
Definition: callbacks.cc:77
void clearPresentation()
Definition: view.cc:396
gboolean on_scroll_event(GtkWidget *, GdkEventScroll *event, gpointer user_data)
Definition: callbacks.cc:401
bool in_devmode()
Definition: callbacks.cc:416
void redraw(cairo_t *cr)
Definition: view.cc:366
void hide()
Definition: view.cc:392
void onDragDataReceived(GtkWidget *, GdkDragContext *, int, int, GtkSelectionData *seldata, guint, guint, gpointer)
Definition: callbacks.cc:498
gboolean on_drawingarea_expose_event(GtkWidget *widget, GdkEventExpose *, gpointer user_data)
Definition: callbacks.cc:246
void on_presentation_added_to_view(const View::Ptr &v)
Definition: callbacks.cc:658
void on_view_created(const View::Ptr &v)
Definition: callbacks.cc:643
#define require(expr)
Definition: assertions.hh:28
std::map< View::Ptr, Scroom::Bookkeeping::Token > Views
Definition: callbacks.cc:55
void on_open_activate(GtkMenuItem *, gpointer user_data)
Definition: callbacks.cc:112
Definition: scroominterface.hh:35
#define ensure(expr)
Definition: assertions.hh:32
static std::string xmlFileName
Definition: callbacks.cc:51
void on_presentation_created(const PresentationInterface::Ptr &presentation)
Definition: callbacks.cc:623
void on_about_activate(GtkMenuItem *, gpointer)
Definition: callbacks.cc:237
static std::list< PresentationInterface::WeakPtr > presentations
Definition: callbacks.cc:57
static GtkWidget * drawingArea
Definition: measure-framerate-callbacks.cc:18
static std::string currentFolder
Definition: callbacks.cc:59
void on_textbox_value_changed(GtkEditable *editable, gpointer user_data)
Definition: callbacks.cc:368
static const std::string SCROOM_DEV_MODE
Definition: callbacks.cc:48
void on_view_destroyed(View *v)
Definition: callbacks.cc:703
void startPluginManager(bool devMode)
Definition: pluginmanager.cc:33
boost::shared_ptr< PresentationInterface > Ptr
Definition: presentationinterface.hh:74
const std::string REGULAR_FILES
Definition: callbacks.cc:49
void on_configure()
Definition: view.cc:617
ProgressBarPulser::Ptr instance()
Definition: progressbarmanager.cc:43
void on_zoombox_changed()
Definition: view.cc:671
Definition: workinterface.hh:12
static FileNameMap filenames
Definition: callbacks.cc:58
static Views views
Definition: callbacks.cc:56
void on_zoombox_changed(GtkComboBox *, gpointer user_data)
Definition: callbacks.cc:362
static GtkWidget * aboutDialog
Definition: callbacks.cc:53
static PluginManager::Ptr getInstance()
Definition: pluginmanager.cc:330
gboolean combinedFileFilter(const GtkFileFilterInfo *filter_info, gpointer data)
Definition: callbacks.cc:94
gboolean on_button_release_event(GtkWidget *, GdkEventButton *event, gpointer user_data)
Definition: callbacks.cc:387
void on_scrollbar_value_changed(GtkAdjustment *adjustment)
Definition: view.cc:714
gboolean on_motion_notify_event(GtkWidget *, GdkEventMotion *event, gpointer user_data)
Definition: callbacks.cc:394
void on_scrollbar_value_changed(GtkAdjustment *adjustment, gpointer user_data)
Definition: callbacks.cc:374
void create_scroom(const PresentationInterface::Ptr &presentation)
Definition: callbacks.cc:537
static GtkBuilder * aboutDialogXml
Definition: callbacks.cc:52
boost::shared_ptr< View > Ptr
Definition: view.hh:100
Definition: bookkeeping.hh:37
void on_close_activate(GtkMenuItem *, gpointer user_data)
Definition: callbacks.cc:230
void on_textbox_value_changed(GtkEditable *editable)
Definition: view.cc:700
void create(NewPresentationInterface *interface)
Definition: loader.cc:175
boost::shared_ptr< Aggregate > Ptr
Definition: presentationinterface.hh:147
void on_quit_activate(GtkMenuItem *, gpointer)
Definition: callbacks.cc:196
void on_fullscreen_activate(GtkMenuItem *item, gpointer user_data)
Definition: callbacks.cc:214