diff options
| author | craig <craig@11d20701-8431-0410-a711-e3c959e3b870> | 2012-01-01 11:40:09 +0000 |
|---|---|---|
| committer | craig <craig@11d20701-8431-0410-a711-e3c959e3b870> | 2012-01-01 11:40:09 +0000 |
| commit | 7ed83b6c6666eb8b6b104c211ae7e52907350372 (patch) | |
| tree | 4430b556abac0ad660a0aacf1887d77f85d8be02 /scribus/plugins/scriptplugin/scripts/InfoBox.py | |
| download | scribus-7ed83b6c6666eb8b6b104c211ae7e52907350372.tar.gz scribus-7ed83b6c6666eb8b6b104c211ae7e52907350372.tar.xz scribus-7ed83b6c6666eb8b6b104c211ae7e52907350372.zip | |
Branch 1.3.5 tree to 1.4.x tree, goodbye 1.3.x
git-svn-id: svn://scribus.net/branches/Version14x/Scribus@17163 11d20701-8431-0410-a711-e3c959e3b870
Diffstat (limited to 'scribus/plugins/scriptplugin/scripts/InfoBox.py')
| -rw-r--r-- | scribus/plugins/scriptplugin/scripts/InfoBox.py | 163 |
1 files changed, 163 insertions, 0 deletions
diff --git a/scribus/plugins/scriptplugin/scripts/InfoBox.py b/scribus/plugins/scriptplugin/scripts/InfoBox.py new file mode 100644 index 0000000..f1050e1 --- /dev/null +++ b/scribus/plugins/scriptplugin/scripts/InfoBox.py @@ -0,0 +1,163 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# **************************************************************************** +# This program 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 2 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, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# **************************************************************************** + + +""" +(C) 2005 by Thomas R. Koll, <tomk32@gmx.de>, http://verlag.tomk32.de + +(c) 2008, 2010 modifications, additional features, and some repair + by Gregory Pittman + +A simple script for exact placement of a frame (infobox) +over the current textbox, asking the user for the width +of the infobox and in which column to place it. + +Some enhancements: + +* You can now create a text frame or an image frame, and also load +an image. + +* More than one infobox can be added to a text frame by repeatedly running + the script (ie, no name conflicts occur). + +* Height and Y-Pos of top of infobox can be specified. + +* Works with any page unit - pts, mm, in, and picas, cm, and even ciceros. + +* Infobox has Text Flows Around Frame activated, also + Scale Image to Frame for images. + +USAGE + +Select a textframe, start the script and have phun +Default name for the infobox is 'infobox' + name_of_selected_frame, +but this can be changed. + + +""" + +try: + import scribus +except ImportError: + print "Unable to import the 'scribus' module. This script will only run within" + print "the Python interpreter embedded in Scribus. Try Script->Execute Script." + sys.exit(1) + +def main(argv): + unit = scribus.getUnit() + units = [' pts','mm',' inches',' picas','cm',' ciceros'] + unitlabel = units[unit] + if scribus.selectionCount() == 0: + scribus.messageBox('Scribus - Script Error', + "There is no object selected.\nPlease select a text frame and try again.", + scribus.ICON_WARNING, scribus.BUTTON_OK) + sys.exit(2) + if scribus.selectionCount() > 1: + scribus.messageBox('Scribus - Script Error', + "You have more than one object selected.\nPlease select one text frame and try again.", + scribus.ICON_WARNING, scribus.BUTTON_OK) + sys.exit(2) + textbox = scribus.getSelectedObject() + pageitems = scribus.getPageItems() + boxcount = 1 + for item in pageitems: + if (item[0] == textbox): + if (item[1] != 4): + scribus.messageBox('Scribus - Script Error', + "This is not a textframe. Try again.", scribus.ICON_WARNING, scribus.BUTTON_OK) + sys.exit(2) + +# While we're finding out what kind of frame is selected, we'll also make sure we +# will come up with a unique name for our infobox frame - it's possible we may want +# more than one for a multicolumn frame. + if (item[0] == ("infobox" + str(boxcount) + textbox)): + boxcount += 1 + left, top = scribus.getPosition(textbox) + o_width, o_height = scribus.getSize(textbox) + o_cols = int(scribus.getColumns(textbox)) + o_gap = scribus.getColumnGap(textbox) + + columns_width = 0 + column_pos = 0 + o_colwidth = (o_width - ((o_cols - 1) * o_gap)) / o_cols + if (o_cols > 1): + while (columns_width > o_cols or columns_width < 1): + columns_width = scribus.valueDialog('Width', + 'How many columns width shall the '+ + 'box be (max ' + str(o_cols) + ')?','1') + columns_width = int(columns_width) + if (columns_width < o_cols): + max = o_cols - columns_width + while (column_pos <= max and column_pos <= 1): + column_pos = scribus.valueDialog('Placement', + 'In which column do you want ' + 'to place the box (1 to ' + + str(o_cols) + ')?','1') + column_pos = int(column_pos) - 1 + if (o_cols == 1): + columns_width = 1 + new_height = 0 + while (new_height == 0): + new_height = scribus.valueDialog('Height','Your frame height is '+ str(o_height) + + unitlabel +'. How tall\n do you want your ' + + 'infobox to be in '+ unitlabel +'?\n If you load an image, height will be\n calculated, so the value here does not\n matter.', str(o_height)) + new_top = -1 + while (new_top < 0): + new_top = scribus.valueDialog('Y-Pos','The top of your infobox is currently\n'+ str(top) + + unitlabel +'. Where do you want \n' + + 'the top to be in '+ unitlabel +'?', str(top)) + framename = scribus.valueDialog('Name of Frame','Name your frame or use this default name',"infobox" + str(boxcount) + textbox) + frametype = 'text' + frametype = scribus.valueDialog('Frame Type','Change to anything other\n than "text" for image frame.\nEnter "imageL" to also load an image',frametype) + new_width = columns_width * o_colwidth + (columns_width-1) * o_gap + new_left = left + ((column_pos) * o_colwidth) + ((column_pos) * o_gap) + if (frametype == 'text'): + new_textbox = scribus.createText(new_left, float(new_top), new_width, float(new_height),framename) + scribus.setColumnGap(0, new_textbox) + scribus.setColumns(1, new_textbox) + scribus.textFlowMode(new_textbox, 1) + else: + if (frametype == 'imageL'): + imageload = scribus.fileDialog('Load image','Images(*.jpg *.png *.tif *.JPG *.PNG *.jpeg *.JPEG *.TIF)',haspreview=1) + new_image = scribus.createImage(new_left, float(new_top), new_width, float(new_height),framename) + scribus.loadImage(imageload, new_image) + scribus.messageBox('Please Note',"Your frame will be created once you click OK.\n\nUse the Context Menu to Adjust Frame to Image.\n\nIf your image does not fill the width completely,\nstretch the frame vertically first.",scribus.BUTTON_OK) + else: + new_image = scribus.createImage(new_left, float(new_top), new_width, float(new_height),framename) + scribus.textFlowMode(new_image, 1) + scribus.setScaleImageToFrame(scaletoframe=1, proportional=1, name=new_image) +if __name__ == '__main__': + # This script makes no sense without a document open + if not scribus.haveDoc(): + scribus.messageBox('Scribus - Script Error', "No document open", scribus.ICON_WARNING, scribus.BUTTON_OK) + sys.exit(1) + # Disable redraws + scribus.setRedraw(False) + # Run the main script, ensuring redraws are re-enabled even if the + # script aborts with an exception, and don't fail with an exception + # even if the document is closed while the script runs. + try: + main(sys.argv) + finally: + try: + scribus.setRedraw(True) + except: + pass + |
