OpenOffice.org Учебник
'Value': node. getElementsByTagName('Value') [0].childNodes[0].nodeValue}) self.kurses.append({'CharCode': 'RUR', 'Nominal': '1', 'Name': u'Российских рублей', 'Value': '1'}) В итоге получаем курсы валют в виде списка словарей и спи сок наименований валют для подстановки в выпадающие меню ValuteName1 и ValuteName2. Добавляем «слушателей» нажатий на кнопки: self.dlgMain.btnCalculate.addActionListener( self ) self.dlgMain.btnClear.addActionListener( self ) Осталось создать обработчики нажатий – методы, вызыва емые при активации соответствующих элементов управления. Именуются они следующим образом: on_action_<имя_элемента>. Кнопка btnClear сбрасывает значения элементов управления на начальные: def on_action_btnClear(self): self.dlgMain.ValuteNum1.Value=100.00 self.dlgMain.ValuteNum2.Value=0 self.dlgMain.ValuteName1.selectItemPos(4,True) self.dlgMain.ValuteName2.selectItemPos(self.dlgMain. ValuteName2.ItemCount-1,True) Кнопка btnCalculate вычисляет курс первой валюты относи тельно другой, подсчитывает сумму в другой валюте и, в зависи мости от состояния флажка, вставляет результат в док умент. def on_action_btnCalculate(self): if (self.dlgMain.ValuteName1.getSelectedItemPos()>-1) and (self.dlgMain.ValuteName2.getSelectedItemPos()>-1): valuteID1=self.dlgMain.ValuteName1. getSelectedItemPos() valuteID2=self.dlgMain.ValuteName2. getSelectedItemPos() self.kursnode1=self.kurses[valuteID1] self.kursnode2=self.kurses[valuteID2] v1=eval(self.kursnode1['Value'].replace(',','.')) /eval(self.kursnode1['Nominal']) v2=eval(self.kursnode2['Value']. replace(',','.')) /eval(self.kursnode2['Nominal']) sum1=self.dlgMain.ValuteNum1.Value val1to2=v1/v2 self.dlgMain.ValuteNum2. Value=sum1*val1to2 if (self.dlgMain.chkInsert.State): if self.cursor.isCollapsed(): self.cursor. String=round(self.dlgMain.ValuteNum2.Value,2) else: self.cursor. collapseToEnd() self.cursor. String=round(self.dlgMain.ValuteNum2.Value,2) Для кнопки Закрыть обработчик не нужен. Наконец, добавим метод заполнения списков наименований валют и добьемся, чтобы пункты «Доллар США» и «Российских рублей» были выбраны по умолчанию: self.fillList() self.dlgMain.ValuteName1.selectItemPos(4,True) self.dlgMain.ValuteName2.selectItemPos(self.dlgMain. ValuteName2.ItemCount-1,True) Метод fillList выглядит так: def fillList(self):
for i in range(0, len(self.kurses)): self.dlgMain.ValuteName1.addItem(self. kurses[i][‘Name’],i) self.dlgMain.ValuteName2. addItem(self.kurses[i][‘Name’],i) В итоге у нас должен получиться такой метод curconverter: def curconverter( self ): self.summa=util.writer.getWord(self.getcontroller()). String self.cursor=self.getcontroller().getViewCursor() self.dlgMain = dlgMain = self.createdialog( 'Main' ) self.dlgMain.btnCalculate.addActionListener( self ) self.dlgMain.btnClear.addActionListener( self ) try: eval(self.summa) self.dlgMain.ValuteNum1.Value=self.summa except: self.dlgMain.ValuteNum1.Value=100.00 self.config = ConfigParser.ConfigParser() self.config.read(os.path.join(self.path, 'settings')) if not(self.config.has_option('Global','URL')): self.config.set('Global','URL', 'http://www. cbr.ru/scripts/XML_daily.asp') self.BANK_URL = self.config.get('Global','URL') self.getKurs() self.fillList() self.dlgMain.ValuteName1.selectItemPos(4,True) self.dlgMain.ValuteName2.selectItemPos(self.dlgMain. ValuteName2.ItemCount-1,True) dlgMain.execute() Результаты наших трудов можно видеть на рис. 5.
Скорая помощь В случае, если вам нужно просмотреть содержимое какого-либо объекта во время выполнения программы, можно воспользоваться встроенной функцией debug (<Expression>). Для вывода сообщений во всплывающих окнах служит метод self. box(“Сообщение”).
Финальный штрих Наше расширение готово. На всякий случай еще раз сохраним диалоги через окно О расширении. Затем войдите в каталог EOEC и соберите готовое расширение. python pack.py CurConverter Чтобы изменить номер версии расширения, необходимо отре дактировать файл description.xml. В строке <version value=”1.0”></version> вместо 1.0 нужно установить требуемый номер. Формат фай ла description.xml подробно описан в руководстве разработчика: http://api.openoffice.org/docs/DevelopersGuide/Extensions/Extensions. xhtml#1_5_description.xml Появившееся в каталоге расширение CurConverter.oxt вер сии 1.0 готово для распространения. Разместить его для об щего доступа можно на сайте расширений для OpenOffice.org: extensions.services.openoffice.org. Инструкцию о том, как правиль но это сделать, можно найти по след ующему адресу: http://wiki. services.openoffice.org/wiki/Extensions/website/submission
Рис. 5. Расшире ние CurConverter готово к работе.
Сентябрь 2009 Linux Format 67