1 /*
2 * A simple dialog for previewing icon representation.
3 *
4 * Authors:
5 * Jon A. Cruz
6 *
7 * Copyright (C) 2005 Jon A. Cruz
8 *
9 * Released under GNU GPL, read the file 'COPYING' for more information
10 */
11 #ifdef HAVE_CONFIG_H
12 # include <config.h>
13 #endif
15 #include <gtk/gtkdialog.h> //for GTK_RESPONSE* types
16 #include <gtkmm/scrolledwindow.h>
18 #include "extension/db.h"
19 #include "extensions.h"
22 namespace Inkscape {
23 namespace UI {
24 namespace Dialogs {
26 using Inkscape::Extension::Extension;
28 ExtensionsPanel* ExtensionsPanel::instance = 0;
31 ExtensionsPanel& ExtensionsPanel::getInstance()
32 {
33 if ( !instance ) {
34 instance = new ExtensionsPanel();
35 }
37 instance->rescan();
39 return *instance;
40 }
44 /**
45 * Constructor
46 */
47 ExtensionsPanel::ExtensionsPanel() :
48 _showAll(false)
49 {
50 Gtk::ScrolledWindow* scroller = new Gtk::ScrolledWindow();
52 _view.set_editable(false);
54 scroller->add(_view);
55 add(*scroller);
57 rescan();
59 show_all_children();
60 }
62 void ExtensionsPanel::set_full(bool full)
63 {
64 if ( full != _showAll ) {
65 _showAll = full;
66 rescan();
67 }
68 }
70 void ExtensionsPanel::listCB( Inkscape::Extension::Extension * in_plug, gpointer in_data )
71 {
72 ExtensionsPanel * self = (ExtensionsPanel*)in_data;
74 const char* stateStr;
75 Extension::state_t state = in_plug->get_state();
76 switch ( state ) {
77 case Extension::STATE_LOADED:
78 {
79 stateStr = "loaded";
80 }
81 break;
82 case Extension::STATE_UNLOADED:
83 {
84 stateStr = "unloaded";
85 }
86 break;
87 case Extension::STATE_DEACTIVATED:
88 {
89 stateStr = "deactivated";
90 }
91 break;
92 default:
93 stateStr = "unknown";
94 }
96 if ( self->_showAll || in_plug->deactivated() ) {
97 // gchar* line = g_strdup_printf( " extension %c %c %s |%s|%s|",
98 // (in_plug->loaded() ? 'X' : '-'),
99 // (in_plug->deactivated() ? 'X' : '-'),
100 // stateStr, in_plug->get_id(),
101 // in_plug->get_name() );
102 gchar* line = g_strdup_printf( "%s %s\n \"%s\"", stateStr, in_plug->get_name(), in_plug->get_id() );
104 self->_view.get_buffer()->insert( self->_view.get_buffer()->end(), line );
105 self->_view.get_buffer()->insert( self->_view.get_buffer()->end(), "\n" );
106 //g_message( "%s", line );
107 }
111 return;
112 }
114 void ExtensionsPanel::rescan()
115 {
116 _view.get_buffer()->set_text("Extensions:\n");
117 // g_message("/------------------");
119 Inkscape::Extension::db.foreach(listCB, (gpointer)this);
121 // g_message("\\------------------");
122 }
126 } //namespace Dialogs
127 } //namespace UI
128 } //namespace Inkscape