I attached the source code since it is rather lengthy (at the very
bottom is the hd_plugin_get_objects() function).

I probably should also mention that I tested this on an actual device,
and it worked great.

On 5/29/09, Anderson Lizardo <[email protected]> wrote:
> On Thu, May 28, 2009 at 7:55 PM, Brent Chiodo <[email protected]> wrote:
>> I'm trying to get a Python Statusbar plugin working in Scratchbox
>> (DIABLO_X86) but get this error:
>>
>> hildon-desktop[8588]: GLIB WARNING ** default - Could not reload
>> Python module 'quickclip'
>> Falling back to previous version
>> hildon-desktop[8588]: GLIB WARNING ** default - Cannot find function
>> "hd_plugin_get_objects"
>>
>> And the plugin does not load.
>
> Can you provide some source code? As the error says, it could not find
> the necessary "hd_plugin_get_objects" function in your plugin, that
> should return a list of plugin objects.
>
> Regards,
> --
> Anderson Lizardo
> OpenBossa Labs - INdT
> Manaus - Brazil
>


-- 
Best Regards,

Brent Chiodo
#!/usr/bin/python2.5

#    Copyright 2009, Brent Chiodo.

#    Quick Clip 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 3 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, see <http://www.gnu.org/licenses/>.

import gtk
import pygtk
import hildon
import hildondesktop
#import hildonhelp
#import commands
import os
#import ConfigParser
#import subprocess
#import osso
#import xml.etree.ElementTree as ET
#import cPickle
import sys

HOME = os.getenv('HOME')

sys.path.append('/usr/lib/quickclip/')

from history import *
from manage_files import *
from settings import *
from settings_dialog import *
from target_files import *
from main_menu import *
from clip_tools import *
from dialogs import *

# Main class

# ============================
class statusbar_applet(hildondesktop.StatusbarItem):
   def __init__(self):
      hildondesktop.StatusbarItem.__init__(self)

      self.settings = Settings().load()
      self.files = Target_Files().get_files()
      self.history, self.history_target = History().load()

      self.button = gtk.ToggleButton()
      self.button.set_image(gtk.image_new_from_file("/usr/share/icons/hicolor/40x40/hildon/quick_clip-40x40.png"))
      self.button.set_name("hildon-statusbar-button-one")
      self.button.set_size_request(40,40)
      self.button.connect("clicked",self.popup_menu)
      self.add(self.button)
      self.show_all()

      Target_Files().create_files()

   def create_menu(self):
      self.menu = gtk.Menu()

      self.settings = Settings().load()
      self.files = Target_Files().get_files()
      self.history, self.history_target = History().load()

      if int(self.settings['default_menu_positioning']) == 0:
         self.default_menu_positioning_func()
         self.menu.append(gtk.SeparatorMenuItem())

      self.create_parent_func()

      if int(self.settings['default_menu_positioning']) == 1:
         self.menu.append(gtk.SeparatorMenuItem())
         self.default_menu_positioning_func()

      self.menu.show_all()

      self.menu.set_name("menu_from_statusbar")
      self.menu.connect("selection-done", self.menu_done)
      self.menu.show_all()

# Main menu call

   def popup_menu(self,widget,data=None):
      if (self.button.get_active() == True):
         self.create_menu()
         self.menu.popup(None,None,self.menu_position,0,gtk.get_current_event_time())

# Cleaup?

   def menu_done(self, widget, data=None):
      self.button.set_active(False)
      self.menu.destroy()

   def menu_position(self,data=None):
      (reqw, reqh) = self.menu.size_request()
      (x,y) = self.button.get_parent_window().get_position()
      button_allocation = self.button.get_allocation()
      y = y + button_allocation.y + button_allocation.height
      x = x + button_allocation.x + button_allocation.width - reqw
      return (x,y,True)
# ===================

   def create_parent_func(self):

      for item in self.files:
         menu_group = gtk.MenuItem(item)
         self.menu.append(menu_group)

         self.submenu = gtk.Menu()
         menu_selection = gtk.MenuItem("Selection >> File")
         menu_entry = gtk.MenuItem("Entry >> File")
         menu_view = gtk.MenuItem("View")
         menu_edit = gtk.MenuItem("Edit")
         menu_clear = gtk.MenuItem("Clear")
         menu_delete = gtk.MenuItem("Delete")
         self.submenu.append(menu_selection)
         self.submenu.append(menu_entry)
         self.submenu.append(gtk.SeparatorMenuItem())
         self.submenu.append(menu_view)
         self.submenu.append(menu_edit)
         self.submenu.append(gtk.SeparatorMenuItem())
         self.submenu.append(menu_clear)
         self.submenu.append(menu_delete)
         menu_selection.connect('activate', Clip_Tools().clip_selection, item)
         menu_entry.connect('activate', Dialogs().entry_dialog, item)
         menu_view.connect('activate', Clip_Tools().view_file, item)
         menu_edit.connect('activate', Clip_Tools().edit_file, item)
         menu_clear.connect('activate', Clip_Tools().clear_file, item)
         menu_delete.connect('activate', Clip_Tools().delete_file, item)
         menu_group.set_submenu(self.submenu)

   def default_menu_positioning_func(self):

      menu_group = gtk.MenuItem("Options")
      self.menu.append(menu_group)

      self.submenu = gtk.Menu()
      about_item = gtk.MenuItem("About Quick Clip")
      manage_item = gtk.MenuItem("Manage Files...")
      settings_item = gtk.MenuItem("Settings...")
      donations_item = gtk.MenuItem("Donations")
      help_item = gtk.MenuItem("Help")
      self.submenu.append(about_item)
      self.submenu.append(manage_item)
      self.submenu.append(settings_item)
      self.submenu.append(donations_item)
      self.submenu.append(help_item)
      about_item.connect('activate',Dialogs().about_dialog)
      manage_item.connect('activate',Manage_Files().manage_files)
      settings_item.connect('activate',Settings_Dialog().settings_dialog)
      donations_item.connect('activate',Dialogs().donations)
      help_item.connect('activate',Dialogs().help)
      menu_group.set_submenu(self.submenu)

      self.history_menu()

# History menu

   def history_menu(self):

      menu_group = gtk.MenuItem("History")
      self.menu.append(menu_group)

      self.submenu = gtk.Menu()

      if len(self.history) == 0:
         history_label = gtk.MenuItem("(No History)")
         history_label.set_sensitive(False)
         history_label.modify_fg(gtk.STATE_INSENSITIVE, None)
         self.submenu.append(history_label)
      else:
         clear_label = gtk.MenuItem("Clear History")
         clear_label.connect('activate', History().clear)
         self.submenu.append(clear_label)
         self.submenu.append(gtk.SeparatorMenuItem())

      for item in self.history:
         name = item
         target_index = self.history.index(item)
         self.set_history_menu(name, target_index, self.submenu)

      menu_group.set_submenu(self.submenu)

   def set_history_menu(self, name, target_index, submenu):
      menu_item = gtk.MenuItem(name)
      self.submenu.append(menu_item)
      menu_item.connect("activate", Clip_Tools().view_file, self.history_target[target_index])

#====================

# Tests to see if system files exist...

if not os.path.exists(HOME + '/.quickclip/'):
   subprocess.Popen('mkdir /home/user/.quickclip', shell=True)

if not os.path.exists(HOME + '/MyDocs/Quick_Clip/'):
   subprocess.Popen('mkdir /home/user/MyDocs/Quick_Clip/', shell=True)

if not os.path.exists(HOME + '/.quickclip/quickclip.conf'):

   user_config_file = open(HOME + '/.quickclip/quickclip.conf', 'w')
   user_config_access = ConfigParser.RawConfigParser()

   user_config_access.set('DEFAULT', 'path', HOME + '/.quickclip/data/')
   user_config_access.set('DEFAULT', 'view_program', '$builtin')
   user_config_access.set('DEFAULT', 'edit_program', '/usr/bin/dbus-send --print-reply --dest=com.nokia.osso_notes /com/nokia/osso_notes com.nokia.osso_notes.mime_open string:"%s"')
   user_config_access.set('DEFAULT', 'use_date_stamp', True)
   user_config_access.set('DEFAULT', 'use_separater', True)
   user_config_access.set('DEFAULT', 'default_menu_positioning', 0)

   user_config_access.write(user_config_file)
   user_config_file.close()

if not os.path.exists(HOME + '/.quickclip/parent_files.xml'):

   parent_files = open(HOME + '/.quickclip/parent_files.xml', 'w')
   parent_files.write("""<config>
  <file>Example File 1</file>
  <file>Example File 2</file>
  <file>Etc...</file>
</config>""")

# ============================
# Main program

def hd_plugin_get_objects():
   plugin = statusbar_applet()
   return [plugin]

# ============================
_______________________________________________
maemo-developers mailing list
[email protected]
https://lists.maemo.org/mailman/listinfo/maemo-developers

Reply via email to