conduit r1405 - in trunk: . conduit/modules/FlickrModule conduit/modules/GoogleModule
- From: jstowers svn gnome org
- To: svn-commits-list gnome org
- Subject: conduit r1405 - in trunk: . conduit/modules/FlickrModule conduit/modules/GoogleModule
- Date: Thu, 3 Apr 2008 21:17:24 +0100 (BST)
Author: jstowers
Date: Thu Apr 3 21:17:24 2008
New Revision: 1405
URL: http://svn.gnome.org/viewvc/conduit?rev=1405&view=rev
Log:
2008-04-04 John Stowers <john stowers gmail com>
* conduit/modules/FlickrModule/FlickrModule.py: Refactor the photoset
code to be more readable and consistent with GoogleModule.
* conduit/modules/GoogleModule/GoogleModule.py:
* conduit/modules/GoogleModule/picasa-config.glade: User gtk.ComboBoxEntry
for the album entry and refactor the album code to close match
FlickrModule (i.e. no explicit album creation, it happens automatically
when you put a photo into a non existant album).
Modified:
trunk/ChangeLog
trunk/conduit/modules/FlickrModule/FlickrModule.py
trunk/conduit/modules/GoogleModule/GoogleModule.py
trunk/conduit/modules/GoogleModule/picasa-config.glade
Modified: trunk/conduit/modules/FlickrModule/FlickrModule.py
==============================================================================
--- trunk/conduit/modules/FlickrModule/FlickrModule.py (original)
+++ trunk/conduit/modules/FlickrModule/FlickrModule.py Thu Apr 3 21:17:24 2008
@@ -125,30 +125,20 @@
# get the id
photoId = ret.photoid[0].elementText
- # check if phtotoset exists, create it otherwise add photo to it
+ # check if phtotoset exists, if not create it
if not self.photoSetId:
- # create one with created photoID if not
- ret = self.fapi.photosets_create(
- title=self.photoSetName,
- primary_photo_id=photoId)
-
- if self.fapi.getRspErrorCode(ret) != 0:
- raise Exceptions.SyncronizeError("Flickr failed to create photoset: %s" % self.fapi.getPrintableError(ret))
-
- self.photoSetId = ret.photoset[0]['id']
- else:
- # add photo to photoset
+ self.photoSetId = self._create_photoset(photoId)
+ # add the photo to the photoset
+ if self.photoSetId:
ret = self.fapi.photosets_addPhoto(
- photoset_id = self.photoSetId,
- photo_id = photoId)
-
+ photoset_id = self.photoSetId,
+ photo_id = photoId)
if self.fapi.getRspErrorCode(ret) != 0:
- raise Exceptions.SyncronizeError("Flickr failed to add photo to set: %s" % self.fapi.getPrintableError(ret))
+ log.warn("Flickr failed to add photo to set: %s" % self.fapi.getPrintableError(ret))
#return the photoID
return Rid(uid=photoId)
-
def _get_photo_size (self):
return self.imageSize
@@ -163,53 +153,64 @@
self.fapi = MyFlickrAPI(FlickrTwoWay.API_KEY, FlickrTwoWay.SHARED_SECRET, self.username)
self.token = self.fapi.login()
self.logged_in = True
+
+ def _create_photoset(self, primaryPhotoId):
+ #create one with created photoID if not
+ ret = self.fapi.photosets_create(
+ title=self.photoSetName,
+ primary_photo_id=primaryPhotoId)
+ photoSetId = None
+ if self.fapi.getRspErrorCode(ret) != 0:
+ log.warn("Flickr failed to create photoset: %s" % self.fapi.getPrintableError(ret))
+ else:
+ photoSetId = ret.photoset[0]['id']
+ return photoSetId
+
+ def _get_photoset(self):
+ for name, photoSetId in self._get_photosets():
+ if name == self.photoSetName:
+ log.debug("Found album %s" % self.photoSetName)
+ self.photoSetId = photoSetId
+
def _get_photosets(self):
ret = self.fapi.photosets_getList()
if self.fapi.getRspErrorCode(ret) != 0:
- raise Exceptions.RefreshError("Flickr Refresh Error: %s" % self.fapi.getPrintableError(ret))
+ log.warn("Flickr Refresh Error: %s" % self.fapi.getPrintableError(ret))
+ return []
- if not hasattr(ret.photosets[0], 'photoset'):
- return None
+ photosets = []
+ if hasattr(ret.photosets[0], 'photoset'):
+ for pset in ret.photosets[0].photoset:
+ photosets.append(
+ (pset.title[0].elementText, #photoset name
+ pset['id'])) #photoset id
+
+ return photosets
+
+ def _get_photos(self):
+ if not self.photoSetId:
+ return []
- return ret
+ photoList = []
+ ret = self.fapi.photosets_getPhotos(photoset_id=self.photoSetId)
+ if self.fapi.getRspErrorCode(ret) != 0:
+ log.warn("Flickr failed to get photos: %s" % self.fapi.getPrintableError(ret))
+ else:
+ for photo in ret.photoset[0].photo:
+ photoList.append(photo['id'])
+ return photoList
# DataProvider methods
def refresh(self):
Image.ImageTwoWay.refresh(self)
- #login
self._login()
-
- # try to get the photoSetId
- ret = self._get_photosets()
- if not ret:
- return
-
- # look up the photo set
- for set in ret.photosets[0].photoset:
- if set.title[0].elementText == self.photoSetName:
- self.photoSetId = set['id']
-
+ self._get_photoset()
used,tot,percent = self._get_user_quota()
log.debug("Used %2.1f%% of monthly badwidth quota (%skb/%skb)" % (percent,used,tot))
def get_all(self):
- # return photos list is filled, raise error if not
- if not self.photoSetId:
- return []
-
- ret = self.fapi.photosets_getPhotos(photoset_id=self.photoSetId)
-
- if self.fapi.getRspErrorCode (ret) != 0:
- raise Exceptions.SyncronizeError("Flickr failed to get photos: %s" % self.fapi.getPrintableError(ret))
-
- photoList = []
-
- for photo in ret.photoset[0].photo:
- photoList.append(photo['id'])
-
- return photoList
-
+ return self._get_photos()
def get (self, LUID):
# get photo info
@@ -261,49 +262,44 @@
"""
import gobject
import gtk
- tree = Utils.dataprovider_glade_get_widget(
- __file__,
- "config.glade",
- "FlickrTwoWayConfigDialog")
-
-
- def load_click(button, tree):
- username_entry = tree.get_widget("username")
-
- self._set_username(username_entry.get_text())
+ def load_click(button, window, usernameEntry, photosetCombo):
+ #set Window cursor to loading
+ #FIXME: Doest do anything because this call blocks the mainloop
+ #anyway
+ window.window.set_cursor(
+ gtk.gdk.Cursor(gtk.gdk.WATCH))
+ self._set_username(usernameEntry.get_text())
self._login()
- build_photoset_model(photoset_combo)
+ if self.logged_in:
+ build_photoset_model(photosetCombo)
+ window.window.set_cursor(None)
def username_changed(entry, load_button):
load_button.set_sensitive (len(entry.get_text()) > 0)
- def build_photoset_model(photoset_combo):
+ def build_photoset_model(photosetCombo):
self.photoset_store.clear()
photoset_count = 0
-
- # get albums
- ret = self._get_photosets()
- if not ret:
- return
-
- # populate combo
photoset_iter = None
- for set in ret.photosets[0].photoset:
- title = set.title[0].elementText
- iter = self.photoset_store.append((title,))
- if title == self.photoSetName:
+ for name, photoSetId in self._get_photosets():
+ iter = self.photoset_store.append((name,))
+ if name == self.photoSetName:
photoset_iter = iter
- photoset_count = photoset_count + 1
+ photoset_count += 1
if photoset_iter:
- photoset_combo.set_active_iter(photoset_iter)
+ photosetCombo.set_active_iter(photoset_iter)
elif self.photoSetName:
- photoset_combo.child.set_text(self.photoSetName)
+ photosetCombo.child.set_text(self.photoSetName)
elif photoset_count:
- photoset_combo.set_active(0)
+ photosetCombo.set_active(0)
#get a whole bunch of widgets
- photoset_combo = tree.get_widget("photoset_combo")
+ tree = Utils.dataprovider_glade_get_widget(
+ __file__,
+ "config.glade",
+ "FlickrTwoWayConfigDialog")
+ photosetCombo = tree.get_widget("photoset_combo")
publicCb = tree.get_widget("public_check")
username = tree.get_widget("username")
load_button = tree.get_widget('load_button')
@@ -312,44 +308,41 @@
resizecombobox = tree.get_widget("resizecombobox")
self._resize_combobox_build(resizecombobox, self.imageSize)
- # signals
- load_button.connect('clicked', load_click, tree)
+ #signals
+ load_button.connect('clicked', load_click, window, username, photosetCombo)
username.connect('changed', username_changed, load_button)
#preload the widgets
publicCb.set_active(self.showPublic)
username.set_text(self.username)
- # setup photoset combo
+ #setup photoset combo
self.photoset_store = gtk.ListStore (gobject.TYPE_STRING)
- photoset_combo.set_model (self.photoset_store)
+ photosetCombo.set_model(self.photoset_store)
cell = gtk.CellRendererText()
- photoset_combo.pack_start(cell, True)
- photoset_combo.set_text_column(0)
-
- # if we're logged in, load the full list by default
- if self.logged_in:
- build_photoset_model(photoset_combo)
- # simply set the text, user can load photosets on request
- else:
- photoset_combo.child.set_text(self.photoSetName)
+ photosetCombo.pack_start(cell, True)
+ photosetCombo.set_text_column(0)
+ #disable photoset lookup if no username entered
+ enabled = len(self.username) > 0
+ load_button.set_sensitive(enabled)
+
# run dialog
dlg = tree.get_widget("FlickrTwoWayConfigDialog")
response = Utils.run_dialog(dlg, window)
if response == True:
- # get the values from the widgets
- self.photoSetName = photoset_combo.child.get_text()
- self.showPublic = publicCb.get_active()
+ #get the values from the widgets
self._set_username(username.get_text())
+ self.photoSetName = photosetCombo.get_active_text()
+ self.showPublic = publicCb.get_active()
self.imageSize = self._resize_combobox_get_active(resizecombobox)
dlg.destroy()
del self.photoset_store
def is_configured (self, isSource, isTwoWay):
- return len (self.username) > 0
+ return len(self.username) > 0 and len(self.photoSetName) > 0
def get_configuration(self):
return {
Modified: trunk/conduit/modules/GoogleModule/GoogleModule.py
==============================================================================
--- trunk/conduit/modules/GoogleModule/GoogleModule.py (original)
+++ trunk/conduit/modules/GoogleModule/GoogleModule.py Thu Apr 3 21:17:24 2008
@@ -533,11 +533,11 @@
def __init__(self, *args):
GoogleBase.__init__(self)
Image.ImageTwoWay.__init__(self)
- self.album = ""
+ self.albumName = ""
self.imageSize = "None"
self.pws = gdata.photos.service.PhotosService()
self.galbum = None
- self.gphoto_dict = None
+ self.gphoto_dict = {}
def _get_raw_photo_url(self, photoInfo):
return photoInfo.GetMediaURL()
@@ -553,11 +553,13 @@
def _upload_photo (self, uploadInfo):
try:
- gphoto = self.pws.InsertPhotoSimple (self.galbum, uploadInfo.name, '', uploadInfo.url)
-
+ gphoto = self.pws.InsertPhotoSimple(
+ self.galbum,
+ uploadInfo.name,
+ '',
+ uploadInfo.url)
for tag in uploadInfo.tags:
self.pws.InsertTag(gphoto, str(tag))
-
return Rid(uid=gphoto.gphoto_id.text)
except Exception, e:
raise Exceptions.SyncronizeError("Picasa Upload Error.")
@@ -566,22 +568,23 @@
self.pws.ClientLogin(self.username, self.password)
def _get_album(self):
- configured_album = None
-
- albums = self.pws.GetUserFeed().entry
- for album in albums:
- if album.title.text != self.album:
- continue
- log.debug("Found album %s" % self.album)
- configured_album = album
- break
-
- if not configured_album:
- log.debug("Creating new album %s." % self.album)
- configured_album = self._create_album(self.album)
-
- self.galbum = configured_album
-
+ for name,album in self._get_albums():
+ if name == self.albumName:
+ log.debug("Found album %s" % self.albumName)
+ self.galbum = album
+ return
+
+ log.debug("Creating new album %s." % self.albumName)
+ self.galbum = self._create_album(self.albumName)
+
+ def _get_albums(self):
+ albums = []
+ for album in self.pws.GetUserFeed().entry:
+ albums.append(
+ (album.title.text, #album name
+ album)) #album
+ return albums
+
def _get_photos(self):
self.gphoto_dict = {}
for photo in self.pws.GetFeed(self.galbum.GetPhotosUri()).entry:
@@ -603,9 +606,9 @@
Image.ImageTwoWay.refresh(self)
self._login()
self._get_album()
- self._get_photos()
def get_all (self):
+ self._get_photos()
return self.gphoto_dict.keys()
def get (self, LUID):
@@ -634,163 +637,89 @@
"""
Configures the PicasaTwoWay
"""
+ import gobject
import gtk
- self.album_count = 0
- def __login (button, widget):
- """
- Logs in and tries to populate other controls and set their
- sensitivity correctly
- """
- username, password = __get_username_password_widgets(widget)
-
- self._set_username(username.get_text())
- self._set_password(password.get_text())
+ def login_click(button, window, usernameEntry, passwordEntry, album_combo):
+ #set Window cursor to loading
+ #FIXME: Doest do anything because this call blocks the mainloop
+ #anyway
+ window.window.set_cursor(
+ gtk.gdk.Cursor(gtk.gdk.WATCH))
+ self._set_username(usernameEntry.get_text())
+ self._set_password(passwordEntry.get_text())
self._login()
-
- album_combo, ok_button = __get_album_combo_ok_widgets(widget)
-
if self.loggedIn:
- __build_album_combo(album_combo)
-
- enabled = self.loggedIn and self.album_count > 0
- ok_button.set_sensitive(enabled)
- album_combo.set_sensitive(enabled)
-
- def __new_album(button, config_widget):
- """
- Pops up a dialog to create a new album.
- config_widget is the parent window
- """
- # get new album dialog
- widget = Utils.dataprovider_glade_get_widget(
- __file__,
- "picasa-config.glade",
- "AlbumDialog")
-
- dlg = widget.get_widget("AlbumDialog")
- name_entry = widget.get_widget("name_entry")
-
- # run the dialog
- config_dialog = config_widget.get_widget("PicasaTwoWayConfigDialog")
- response = Utils.run_dialog (dlg, config_dialog)
- # get new name
- new_album_name = name_entry.get_text().strip()
-
- # create new one, if it doesn't exist yet
- if response and new_album_name:
- if not new_album_name in (album.title.text for album in self.pws.GetUserFeed().entry):
- # create the album
- self._create_album (new_album_name)
- # set album to newly created one
- self.album = new_album_name
- # get some widgets
- album_combo, ok_button = __get_album_combo_ok_widgets(config_widget)
- # refresh the combo
- __build_album_combo(album_combo)
- # refresh buttons
- enabled = self.loggedIn and self.album_count > 0
- album_combo.set_sensitive(enabled)
- ok_button.set_sensitive(enabled)
-
- dlg.destroy()
-
- def __build_album_combo(album_combo):
- """
- Populates the given album combo with the list of albums
- """
- # clear the store
- self.album_store.clear ()
- self.album_count = 0
- # keep configured one
+ build_album_model(album_combo)
+ #album_combo.set_sensitive(True)
+ window.window.set_cursor(None)
+
+ def username_password_changed(sender, username, password, login_button):
+ login_button.set_sensitive(
+ len(username.get_text()) > 0 and len(password.get_text()) > 0)
+
+ def build_album_model(album_combo):
+ self.album_store.clear()
+ album_count = 0
album_iter = None
- # loop through user feed
- for album in self.pws.GetUserFeed().entry:
- title = album.title.text
- # append to store
- iter = self.album_store.append ((title,))
- if title == self.album:
+ for name, album in self._get_albums():
+ iter = self.album_store.append((name,))
+ if name == self.albumName:
album_iter = iter
- self.album_count = self.album_count + 1
+ album_count += 1
- # did we find an iter?
if album_iter:
album_combo.set_active_iter(album_iter)
- # activate first one
- elif self.album_count > 0:
+ elif self.albumName:
+ album_combo.child.set_text(self.albumName)
+ elif album_count:
album_combo.set_active(0)
-
- def __get_username_password_widgets(widget):
- username = widget.get_widget('username')
- password = widget.get_widget('password')
- return username, password
-
- def __get_album_combo_ok_widgets(widget):
- album_combo = widget.get_widget('album_combo')
- ok_button = widget.get_widget('ok_button')
- return album_combo, ok_button
-
- # put cursor in waiting mode
- watch = gtk.gdk.Cursor(gtk.gdk.WATCH)
- window.window.set_cursor(watch)
-
- # try loggin in if not done yet
- if not self.loggedIn:
- self._login()
-
- # get widget and dialog
- widget = Utils.dataprovider_glade_get_widget(
+
+ #get widget and dialog
+ tree = Utils.dataprovider_glade_get_widget(
__file__,
"picasa-config.glade",
"PicasaTwoWayConfigDialog")
- dlg = widget.get_widget("PicasaTwoWayConfigDialog")
#get a whole bunch of widgets
- username, password = __get_username_password_widgets(widget)
- album_combo, ok_button = __get_album_combo_ok_widgets(widget)
- login_button = widget.get_widget("login_button")
- new_album_button = widget.get_widget("new_album")
- resizecombobox = widget.get_widget("combobox1")
-
- # connect to signals
- login_button.connect('clicked', __login, widget)
- new_album_button.connect('clicked', __new_album, widget)
-
- # setup album combo
- self.album_store = gtk.ListStore (gobject.TYPE_STRING)
- album_combo.set_model (self.album_store)
- cell = gtk.CellRendererText()
- album_combo.pack_start(cell, True)
- album_combo.add_attribute(cell, 'text', 0)
+ username = tree.get_widget('username')
+ password = tree.get_widget('password')
+ album_combo = tree.get_widget('album_combobox')
+ login_button = tree.get_widget("login_button")
- # disable if not logged in
- enabled = self.loggedIn and self.album_count > 0
- ok_button.set_sensitive(self.loggedIn)
- album_combo.set_sensitive(self.loggedIn)
- new_album_button.set_sensitive(self.loggedIn)
-
- # build album list if we're logged in
- if self.loggedIn:
- __build_album_combo(album_combo)
+ resizecombobox = tree.get_widget("resize_combobox")
+ self._resize_combobox_build(resizecombobox, self.imageSize)
- # Stop watch cursor
- window.window.set_cursor(None)
+ #connect to signals
+ login_button.connect('clicked', login_click, window, username, password, album_combo)
+ username.connect('changed', username_password_changed, username, password, login_button)
+ password.connect('changed', username_password_changed, username, password, login_button)
#preload the widgets
username.set_text(self.username)
password.set_text(self.password)
- self._resize_combobox_build(resizecombobox, self.imageSize)
-
+ #setup album combo
+ self.album_store = gtk.ListStore(gobject.TYPE_STRING)
+ album_combo.set_model (self.album_store)
+ cell = gtk.CellRendererText()
+ album_combo.pack_start(cell, True)
+ album_combo.set_text_column(0)
+
+ #disable album lookup if no username entered
+ enabled = len(self.username) > 0
+ login_button.set_sensitive(enabled)
+ #album_combo.set_sensitive(enabled)
+
# Now run the dialog
+ dlg = tree.get_widget("PicasaTwoWayConfigDialog")
response = Utils.run_dialog (dlg, window)
if response == True:
self._set_username(username.get_text())
self._set_password(password.get_text())
- self.album = album_combo.get_active_text()
+ self.albumName = album_combo.get_active_text()
self.imageSize = self._resize_combobox_get_active(resizecombobox)
# cleanup
- del self.album_count
del self.album_store
dlg.destroy()
@@ -798,18 +727,18 @@
conf = GoogleBase.get_configuration(self)
conf.update({
"imageSize" : self.imageSize,
- "album" : self.album})
+ "album" : self.albumName})
return conf
def set_configuration(self, config):
GoogleBase.set_configuration(self, config)
self.imageSize = config.get("imageSize","None")
- self.album = config.get("album","")
+ self.albumName = config.get("album","")
def is_configured (self, isSource, isTwoWay):
if not GoogleBase.is_configured(self, isSource, isTwoWay):
return False
- if len(self.album) < 1:
+ if len(self.albumName) < 1:
return False
return True
Modified: trunk/conduit/modules/GoogleModule/picasa-config.glade
==============================================================================
--- trunk/conduit/modules/GoogleModule/picasa-config.glade (original)
+++ trunk/conduit/modules/GoogleModule/picasa-config.glade Thu Apr 3 21:17:24 2008
@@ -1,465 +1,195 @@
-<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
-<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
-
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
+<!--*- mode: xml -*-->
<glade-interface>
-
-<widget class="GtkDialog" id="PicasaTwoWayConfigDialog">
- <property name="visible">True</property>
- <property name="title" translatable="yes">Picasa</property>
- <property name="type">GTK_WINDOW_TOPLEVEL</property>
- <property name="window_position">GTK_WIN_POS_NONE</property>
- <property name="modal">False</property>
- <property name="default_width">250</property>
- <property name="default_height">350</property>
- <property name="resizable">False</property>
- <property name="destroy_with_parent">False</property>
- <property name="decorated">True</property>
- <property name="skip_taskbar_hint">False</property>
- <property name="skip_pager_hint">False</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
- <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
- <property name="focus_on_map">True</property>
- <property name="urgency_hint">False</property>
- <property name="has_separator">True</property>
-
- <child internal-child="vbox">
- <widget class="GtkVBox" id="vbox30">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">5</property>
-
- <child internal-child="action_area">
- <widget class="GtkHButtonBox" id="hbuttonbox12">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
-
- <child>
- <widget class="GtkButton" id="button32">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-cancel</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="response_id">-6</property>
- </widget>
- </child>
-
- <child>
- <widget class="GtkButton" id="ok_button">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-ok</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="response_id">-5</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label74">
- <property name="visible">True</property>
- <property name="label" translatable="yes"><b>Account Details</b></property>
- <property name="use_underline">False</property>
- <property name="use_markup">True</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label75">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Username:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEntry" id="username">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">True</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">â</property>
- <property name="activates_default">False</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label76">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Password:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEntry" id="password">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">True</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">â</property>
- <property name="activates_default">False</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkButton" id="login_button">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">Login</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHSeparator" id="hseparator1">
- <property name="visible">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label78">
- <property name="visible">True</property>
- <property name="label" translatable="yes"><b>Saved Photo Settings</b></property>
- <property name="use_underline">False</property>
- <property name="use_markup">True</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label77">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Album:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHBox" id="hbox2">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkComboBox" id="album_combo">
- <property name="visible">True</property>
- <property name="add_tearoffs">False</property>
- <property name="focus_on_click">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkButton" id="new_album">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="label" translatable="yes">New</property>
- <property name="use_underline">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkLabel" id="label1">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Resize Photos:</property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkComboBox" id="combobox1">
- <property name="visible">True</property>
- <property name="add_tearoffs">False</property>
- <property name="focus_on_click">True</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-</widget>
-
-<widget class="GtkDialog" id="AlbumDialog">
- <property name="visible">True</property>
- <property name="title" translatable="yes">New Album</property>
- <property name="type">GTK_WINDOW_TOPLEVEL</property>
- <property name="window_position">GTK_WIN_POS_NONE</property>
- <property name="modal">False</property>
- <property name="resizable">True</property>
- <property name="destroy_with_parent">False</property>
- <property name="decorated">True</property>
- <property name="skip_taskbar_hint">False</property>
- <property name="skip_pager_hint">False</property>
- <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
- <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
- <property name="focus_on_map">True</property>
- <property name="urgency_hint">False</property>
- <property name="has_separator">True</property>
-
- <child internal-child="vbox">
- <widget class="GtkVBox" id="dialog-vbox1">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child internal-child="action_area">
- <widget class="GtkHButtonBox" id="dialog-action_area1">
- <property name="visible">True</property>
- <property name="layout_style">GTK_BUTTONBOX_END</property>
-
- <child>
- <widget class="GtkButton" id="cancelbutton1">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-cancel</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="response_id">-6</property>
- </widget>
- </child>
-
- <child>
- <widget class="GtkButton" id="okbutton1">
- <property name="visible">True</property>
- <property name="can_default">True</property>
- <property name="can_focus">True</property>
- <property name="label">gtk-ok</property>
- <property name="use_stock">True</property>
- <property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="focus_on_click">True</property>
- <property name="response_id">-5</property>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="pack_type">GTK_PACK_END</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkHBox" id="hbox1">
- <property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">0</property>
-
- <child>
- <widget class="GtkLabel" id="label79">
- <property name="visible">True</property>
- <property name="label" translatable="yes">Name: </property>
- <property name="use_underline">False</property>
- <property name="use_markup">False</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
-
- <child>
- <widget class="GtkEntry" id="name_entry">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="editable">True</property>
- <property name="visibility">True</property>
- <property name="max_length">0</property>
- <property name="text" translatable="yes"></property>
- <property name="has_frame">True</property>
- <property name="invisible_char">â</property>
- <property name="activates_default">False</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
- </packing>
- </child>
- </widget>
- </child>
-</widget>
-
+ <widget class="GtkDialog" id="PicasaTwoWayConfigDialog">
+ <property name="visible">True</property>
+ <property name="title" translatable="yes">Picasa</property>
+ <property name="resizable">False</property>
+ <property name="default_width">250</property>
+ <property name="default_height">350</property>
+ <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+ <child internal-child="vbox">
+ <widget class="GtkVBox" id="vbox30">
+ <property name="visible">True</property>
+ <property name="spacing">5</property>
+ <child>
+ <widget class="GtkLabel" id="label74">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes"><b>Account Details</b></property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label75">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Username:</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">3</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkEntry" id="username">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">4</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label76">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Password:</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">5</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkEntry" id="password">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="visibility">False</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">6</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkButton" id="login_button">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Login</property>
+ <property name="use_underline">True</property>
+ <property name="response_id">0</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">7</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkHSeparator" id="hseparator1">
+ <property name="visible">True</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">8</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label78">
+ <property name="visible">True</property>
+ <property name="label" translatable="yes"><b>Saved Photo Settings</b></property>
+ <property name="use_markup">True</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">9</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label77">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Album:</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">10</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkComboBoxEntry" id="album_combobox">
+ <property name="visible">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ <child internal-child="entry">
+ <widget class="GtkEntry" id="album_combo_entry">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="position">11</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label1">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Resize Photos:</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">12</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkComboBox" id="resize_combobox">
+ <property name="visible">True</property>
+ </widget>
+ <packing>
+ <property name="position">13</property>
+ </packing>
+ </child>
+ <child internal-child="action_area">
+ <widget class="GtkHButtonBox" id="hbuttonbox12">
+ <property name="visible">True</property>
+ <property name="layout_style">GTK_BUTTONBOX_END</property>
+ <child>
+ <widget class="GtkButton" id="button32">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="label">gtk-cancel</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">-6</property>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkButton" id="ok_button">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="label">gtk-ok</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">-5</property>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="pack_type">GTK_PACK_END</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
</glade-interface>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]