glom r1442 - in trunk: . glom/utility_widgets



Author: jhs
Date: Thu Feb 28 13:41:06 2008
New Revision: 1442
URL: http://svn.gnome.org/viewvc/glom?rev=1442&view=rev

Log:
2008-02-28  Johannes Schmid  <johannes schmid openismus com>

	* glom/utility_widgets/dragbar.cc:
	* glom/utility_widgets/dragbutton.cc:
	* glom/utility_widgets/dragbutton.h:
	* glom/utility_widgets/flowtable.cc:
	* glom/utility_widgets/sidebar.cc:
	* glom/utility_widgets/sidebar.h:
	Use EggToolPalette for the developer drag and drop toolbar

Modified:
   trunk/ChangeLog
   trunk/glom/utility_widgets/dragbar.cc
   trunk/glom/utility_widgets/dragbutton.cc
   trunk/glom/utility_widgets/dragbutton.h
   trunk/glom/utility_widgets/flowtable.cc
   trunk/glom/utility_widgets/sidebar.cc
   trunk/glom/utility_widgets/sidebar.h

Modified: trunk/glom/utility_widgets/dragbar.cc
==============================================================================
--- trunk/glom/utility_widgets/dragbar.cc	(original)
+++ trunk/glom/utility_widgets/dragbar.cc	Thu Feb 28 13:41:06 2008
@@ -25,12 +25,16 @@
 #include "config.h"
 
 #include "layoutwidgetbase.h"
+#include "eggtoolpalette/eggtoolitemgroup.h"
 
 namespace Glom
 {
 
 DragBar::DragBar()
-{ 
+{
+	// Does look ugly otherwise
+	set_size_request(100, 200);
+	
   Gtk::Image* image_item = 
     Gtk::manage (new Gtk::Image(GLOM_ICON_DIR "/glom-field.png"));
   Gtk::Image* image_button = 
@@ -43,20 +47,28 @@
   Gtk::Image* image_notebook = 
     Gtk::manage (new Gtk::Image(GLOM_ICON_DIR "/glom-notebook.png"));
   
+	
   DragButton* drag_group = Gtk::manage(new DragButton(*image_group, LayoutWidgetBase::TYPE_GROUP));  
   DragButton* drag_notebook = Gtk::manage(new DragButton(*image_notebook, LayoutWidgetBase::TYPE_NOTEBOOK));  
 
   DragButton* drag_item = Gtk::manage(new DragButton(*image_item, LayoutWidgetBase::TYPE_FIELD));
   DragButton* drag_button = Gtk::manage(new DragButton(*image_button, LayoutWidgetBase::TYPE_BUTTON));
   DragButton* drag_text = Gtk::manage(new DragButton(*image_text, LayoutWidgetBase::TYPE_TEXT));  
-    
-  add_button (*drag_group);
-  add_button (*drag_notebook);
   
-  add_button (*drag_item);
-  add_button (*drag_button);
-  add_button (*drag_text);
+	GtkContainer* container_group = GTK_CONTAINER(egg_tool_item_group_new(_("Container")));
+	gtk_container_add (container_group, GTK_WIDGET(drag_group->gobj()));
+	gtk_container_add (container_group, GTK_WIDGET(drag_notebook->gobj()));
+
+	GtkContainer* fields_group = GTK_CONTAINER(egg_tool_item_group_new(_("Fields")));
+	gtk_container_add (fields_group, GTK_WIDGET(drag_item->gobj()));
+	gtk_container_add (fields_group, GTK_WIDGET(drag_button->gobj()));  
+	gtk_container_add (fields_group, GTK_WIDGET(drag_text->gobj()));
 	
+	add_group (EGG_TOOL_ITEM_GROUP(container_group));
+	add_group (EGG_TOOL_ITEM_GROUP(fields_group));
+	
+  set_drag_source();
+  
   show_all_children();
 }
 

Modified: trunk/glom/utility_widgets/dragbutton.cc
==============================================================================
--- trunk/glom/utility_widgets/dragbutton.cc	(original)
+++ trunk/glom/utility_widgets/dragbutton.cc	Thu Feb 28 13:41:06 2008
@@ -23,10 +23,11 @@
 namespace Glom
 {
   
-DragButton::DragButton(Gtk::Image& image, LayoutWidgetBase::enumType type)
+DragButton::DragButton(Gtk::Image& image, LayoutWidgetBase::enumType type) :
+	Gtk::ToolButton(image)
 {
-  set_image(image);
   m_type = type;
+	g_object_set_data (G_OBJECT(gobj()), "glom-type", GINT_TO_POINTER(type));
   std::list<Gtk::TargetEntry> targetentries;
   targetentries.push_back(Gtk::TargetEntry(get_target()));
   drag_source_set(targetentries, Gdk::MODIFIER_MASK, 
@@ -46,7 +47,7 @@
 
 void DragButton::on_drag_begin(const Glib::RefPtr<Gdk::DragContext>& drag_context)
 {
-	drag_context->set_icon (dynamic_cast<Gtk::Image*>(get_image())->get_pixbuf(), 0, 0);
+	drag_context->set_icon (dynamic_cast<Gtk::Image*>(get_icon_widget())->get_pixbuf(), 0, 0);
 }
 
 } // namespace Glom

Modified: trunk/glom/utility_widgets/dragbutton.h
==============================================================================
--- trunk/glom/utility_widgets/dragbutton.h	(original)
+++ trunk/glom/utility_widgets/dragbutton.h	Thu Feb 28 13:41:06 2008
@@ -30,7 +30,7 @@
 namespace Glom
 {
   
-class DragButton : public Gtk::Button
+class DragButton : public Gtk::ToolButton
 {
   public:
     DragButton(Gtk::Image& image, LayoutWidgetBase::enumType type);  

Modified: trunk/glom/utility_widgets/flowtable.cc
==============================================================================
--- trunk/glom/utility_widgets/flowtable.cc	(original)
+++ trunk/glom/utility_widgets/flowtable.cc	Thu Feb 28 13:41:06 2008
@@ -26,6 +26,7 @@
 #include "imageglom.h"
 #include "layoutwidgetbase.h"
 #include "placeholder-glom.h"
+#include "eggtoolpalette/eggtoolpalette.h"
 #include <gtk/gtkwidget.h>
 #include <gdk/gdktypes.h>
 #include <iostream>
@@ -331,7 +332,7 @@
   set_flags(Gtk::NO_WINDOW);
   set_redraw_on_allocate(false);
   std::list<Gtk::TargetEntry> drag_targets;
-  Gtk::TargetEntry drag_target(DragButton::get_target());
+  Gtk::TargetEntry drag_target(egg_tool_palette_get_drag_target_item());
   drag_targets.push_back(drag_target);
   drag_dest_set(drag_targets);
 }
@@ -431,7 +432,7 @@
   if (!(child.get_flags() & Gtk::NO_WINDOW))
   {
     std::list<Gtk::TargetEntry> new_targets;
-    new_targets.push_back(Gtk::TargetEntry(DragButton::get_target()));
+    new_targets.push_back(Gtk::TargetEntry(egg_tool_palette_get_drag_target_item()));
     Glib::RefPtr<Gtk::TargetList> targets =
 			child.drag_dest_get_target_list ();
     // The widget has already a default drag destination - add more targets
@@ -1148,27 +1149,36 @@
 
 void FlowTable::on_drag_data_received(const Glib::RefPtr<Gdk::DragContext>& drag_context, int drag_x, int drag_y, const Gtk::SelectionData& selection_data, guint, guint time)
 {
-  LayoutWidgetBase::enumType type = static_cast<LayoutWidgetBase::enumType>(*selection_data.get_data());
-  LayoutWidgetBase* above = dnd_find_datawidget ();
-  switch (type)
-  {
-  case LayoutWidgetBase::TYPE_FIELD:
-    on_dnd_add_layout_item_field(above);
-    break;
-  case LayoutWidgetBase::TYPE_BUTTON:
-    on_dnd_add_layout_item_button(above);
-    break;
-  case LayoutWidgetBase::TYPE_TEXT:
-    on_dnd_add_layout_item_text(above);
-    break;
-  case LayoutWidgetBase::TYPE_GROUP:
-    on_dnd_add_layout_group(above);
-    break;
-  case LayoutWidgetBase::TYPE_NOTEBOOK:
-    on_dnd_add_layout_notebook(above);
-    break;
-  default:
-    std::cerr << "Unknown drop type: " << type << std::endl;
+  Gtk::Widget* palette = drag_get_source_widget (drag_context);
+  while (palette && !EGG_IS_TOOL_PALETTE (palette->gobj()))
+    palette = palette->get_parent();
+  if (palette)
+  {
+    GtkWidget* tool_item = egg_tool_palette_get_drag_item (EGG_TOOL_PALETTE (palette->gobj()), selection_data.gobj());
+    LayoutWidgetBase::enumType type = 
+      static_cast<LayoutWidgetBase::enumType>(GPOINTER_TO_INT(g_object_get_data(G_OBJECT(tool_item), "glom-type")));
+  
+    LayoutWidgetBase* above = dnd_find_datawidget ();
+    switch (type)
+    {
+      case LayoutWidgetBase::TYPE_FIELD:
+        on_dnd_add_layout_item_field(above);
+        break;
+      case LayoutWidgetBase::TYPE_BUTTON:
+        on_dnd_add_layout_item_button(above);
+        break;
+      case LayoutWidgetBase::TYPE_TEXT:
+        on_dnd_add_layout_item_text(above);
+        break;
+      case LayoutWidgetBase::TYPE_GROUP:
+        on_dnd_add_layout_group(above);
+        break;
+      case LayoutWidgetBase::TYPE_NOTEBOOK:
+        on_dnd_add_layout_notebook(above);
+        break;
+      default:
+        std::cerr << "Unknown drop type: " << type << std::endl;
+    }
   }
   change_dnd_status(false);
 }

Modified: trunk/glom/utility_widgets/sidebar.cc
==============================================================================
--- trunk/glom/utility_widgets/sidebar.cc	(original)
+++ trunk/glom/utility_widgets/sidebar.cc	Thu Feb 28 13:41:06 2008
@@ -24,11 +24,11 @@
 {
 
 SideBar::SideBar()
-{ 
-  set_snap_edge(Gtk::POS_LEFT);
-  set_handle_position(Gtk::POS_TOP);
-  
-  add(m_box);
+{  
+	palette = EGG_TOOL_PALETTE(egg_tool_palette_new ());
+	Gtk::Container* container = Glib::wrap(GTK_CONTAINER(palette));
+	
+	add(*container);
   show_all_children();
 }
 
@@ -37,15 +37,20 @@
   
 }
 
-void SideBar::add_button(Gtk::Button& button)
+void SideBar::add_group(EggToolItemGroup* group)
+{
+	gtk_container_add(GTK_CONTAINER(palette), GTK_WIDGET(group));
+}
+
+void SideBar::remove_group(EggToolItemGroup* group)
 {
-  button.set_relief(Gtk::RELIEF_HALF);
-  m_box.pack_start(button, false, false, 0);
+	gtk_container_remove(GTK_CONTAINER(palette), GTK_WIDGET(group));
 }
 
-void SideBar::remove_button(Gtk::Button& button)
+void SideBar::set_drag_source()
 {
-  m_box.remove(button);  
+  // It's important to call this AFTER all groups have been added
+  egg_tool_palette_set_drag_source (palette);
 }
 
 } // namespace Glom

Modified: trunk/glom/utility_widgets/sidebar.h
==============================================================================
--- trunk/glom/utility_widgets/sidebar.h	(original)
+++ trunk/glom/utility_widgets/sidebar.h	Thu Feb 28 13:41:06 2008
@@ -25,21 +25,25 @@
 #include <gtkmm/handlebox.h>
 #include <gtkmm/box.h>
 #include <gtkmm/button.h>
+#include "eggtoolpalette/eggtoolpalette.h"
+#include "eggtoolpalette/eggtoolitemgroup.h"
 
 namespace Glom
 {
 
-class SideBar : public Gtk::HandleBox
+class SideBar : public Gtk::VBox
 {
 public:
   SideBar();
   ~SideBar();
     
-  void add_button(Gtk::Button& button);
-  void remove_button(Gtk::Button& button);
+  void add_group (EggToolItemGroup* group);
+	void remove_group (EggToolItemGroup* group);
+  
+  void set_drag_source();
   
 private:
-  Gtk::VBox m_box;
+  EggToolPalette* palette;
 };
 
 } //namespace Glom



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]