Changeset 88 in main


Ignore:
Timestamp:
07/15/10 12:19:55 (11 years ago)
Author:
pcosquer
Message:

plugin openoffice : revise ok

Location:
trunk/plugins/openoffice
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/plugins/openoffice/Addons.xcu

    r87 r88  
    6363                    <node oor:name="m5" oor:op="replace"> 
    6464                        <prop oor:name="Title" oor:type="xs:string"> 
    65                             <value>Check-in</value> 
     65                            <value>Revise</value> 
    6666                        </prop> 
    6767                        <prop oor:name="URL" oor:type="xs:string"> 
    68                             <value>service:org.example.OpenPLMCheckIn</value> 
     68                            <value>service:org.example.OpenPLMRevise</value> 
    6969                        </prop> 
    7070                        <prop oor:name="Target" oor:type="xs:string"> 
  • trunk/plugins/openoffice/openplm.py

    r87 r88  
    1212 
    1313import traceback 
    14 import uno 
    1514import unohelper 
    1615 
     
    1817from com.sun.star.task import XJobExecutor 
    1918from com.sun.star.awt import XActionListener, XItemListener 
    20 from com.sun.star.awt.InvalidateStyle import CHILDREN, UPDATE 
     19from com.sun.star.awt.InvalidateStyle import UPDATE 
    2120from com.sun.star.awt.tree import XTreeExpansionListener 
    2221from com.sun.star.view import XSelectionChangeListener 
    2322from com.sun.star.view.SelectionType import SINGLE 
    24  
     23from com.sun.star.util import CloseVetoException 
    2524 
    2625class OpenPLMPluginInstance(object): 
     
    6867            raise ValueError() 
    6968 
    70     def download_cb(self): 
    71         diag = DownloadDialog(self._window, self) 
    72         diag.run() 
    73         diag.destroy() 
    74          
    7569    def attach_cb(self): 
    7670        gdoc = self._window.get_active_document() 
     
    263257 
    264258    def revise(self, gdoc, revision, unlock): 
    265         doc = gdoc.get_data("openplm_doc") 
    266         doc_file_id = gdoc.get_data("openplm_file_id") 
    267         path = gdoc.get_data("openplm_path") 
    268         if doc and doc_file_id and path: 
    269            
     259        if gdoc and gdoc.URL in self.documents: 
     260            doc = self.documents[gdoc.URL]["openplm_doc"] 
     261            doc_file_id = self.documents[gdoc.URL]["openplm_file_id"] 
     262            path = self.documents[gdoc.URL]["openplm_path"] 
    270263            res = self.get_data("api/object/%s/revise/" % doc["id"], 
    271264                                {"revision" : revision}) 
    272265            new_doc = res["doc"] 
    273             name = os.path.basename(gdoc.get_uri()) 
     266            name = os.path.basename(gdoc.URL) 
    274267            doc_file = None 
    275268            for f in res["files"]: 
     
    285278                # directory already exists, just ignores the exception 
    286279                pass 
    287  
    288             self.forget(gdoc) 
    289             path = os.path.join(rep, name) 
    290             gdoc.set_uri("file://" + path) 
    291             def func(): 
    292                 gd = self.load_file(new_doc, doc_file["id"], path) 
    293                 self.add_managed_file(new_doc, doc_file, path) 
    294                 self.check_in(gd, unlock, False) 
    295                 self.get_data("api/object/%s/unlock/%s/" % (doc["id"], doc_file_id)) 
    296             save_document(self._window, gdoc, func) 
     280             
     281            gdoc.store() 
     282            new_path = os.path.join(rep, name) 
     283            shutil.move(path, new_path) 
     284            self.forget(gdoc, delete=False) 
     285            gd = self.load_file(new_doc, doc_file["id"], new_path) 
     286            self.add_managed_file(new_doc, doc_file, new_path) 
     287            self.check_in(gd, unlock, False) 
     288            self.get_data("api/object/%s/unlock/%s/" % (doc["id"], doc_file_id)) 
    297289        else: 
    298290            # TODO 
    299291            print 'can not revise' 
    300  
    301     def revise_cb(self): 
    302         gdoc = self._window.get_active_document() 
    303         doc = gdoc.get_data("openplm_doc") 
    304         doc_file_id = gdoc.get_data("openplm_file_id") 
    305         if not doc or not self.check_is_locked(doc["id"], doc_file_id): 
    306             return 
    307         revisable = self.get_data("api/object/%s/isrevisable/" % doc["id"])["revisable"] 
    308         if not revisable: 
    309             show_error(_("Document can not be revised"), self._window) 
    310             return 
    311         name = os.path.basename(gdoc.get_data("openplm_path")) 
    312         doc_file_id = gdoc.get_data("openplm_file_id") 
    313         res = self.get_data("api/object/%s/nextrevision/" % doc["id"]) 
    314         revision = res["revision"] 
    315         diag = ReviseDialog(self._window, self, doc, name, revision) 
    316         resp = diag.run() 
    317         if resp == gtk.RESPONSE_ACCEPT: 
    318             self.revise(gdoc, diag.get_revision(), diag.get_unlock()) 
    319         diag.destroy() 
    320292 
    321293    def check_is_locked(self, doc_id, file_id, error_dialog=True): 
     
    328300        locked = self.get_data("api/object/%s/islocked/%s/" % (doc_id, file_id))["locked"] 
    329301        if not locked and error_dialog: 
    330             show_error(_("File is not locked, action not allowed"), self._window) 
     302            show_error("File is not locked, action not allowed") 
    331303        return locked 
    332304 
     
    692664                                       self.doc["type"]) 
    693665 
    694         label = self.addWidget('Username', 'FixedText', 5, 10, 60, 14, 
     666        label = self.addWidget('label', 'FixedText', 5, 10, 60, 14, 
    695667                               Label = text) 
    696668        self.unlock_button = self.addWidget('unlock_button', 'CheckBox', 
     
    721693        except: 
    722694            traceback.print_exc() 
     695 
     696class ReviseDialog(Dialog): 
     697 
     698    TITLE = "Revise..." 
     699    ACTION_NAME = "Revise" 
     700    WIDTH = 200 
     701    HEIGHT = 100 
     702 
     703    def __init__(self, ctx, doc, name, revision): 
     704        Dialog.__init__(self, ctx) 
     705        self.doc = doc 
     706        self.name = name 
     707        self.revision = revision 
     708 
     709    def run(self): 
     710        smgr = self.ctx.ServiceManager 
     711        self.dialog = smgr.createInstanceWithContext( 
     712            'com.sun.star.awt.UnoControlDialogModel', self.ctx) 
     713        self.dialog.Width = self.WIDTH 
     714        self.dialog.Height = self.HEIGHT 
     715        self.dialog.Title = self.TITLE 
     716         
     717        text = "%s|" % self.doc["reference"] 
     718        label = self.addWidget('ref', 'FixedText', 5, 10, 60, 14, 
     719                               Label = text) 
     720        self.revision_entry = self.addWidget("rev_button", "Edit", 70, 10, 60, 14, 
     721                                              Text=self.revision) 
     722        text = "|%s" % self.doc["type"] 
     723        label = self.addWidget('type', 'FixedText', 135, 10, 60, 14, 
     724                               Label=text) 
     725        self.unlock_button = self.addWidget('unlock_button', 'CheckBox', 
     726                                            5, 30, 100, 14, Label='Unlock ?') 
     727 
     728        button = self.addWidget('action', 'Button', 55, 85, 50, 14, 
     729                                Label=self.ACTION_NAME) 
     730        self.container = smgr.createInstanceWithContext( 
     731            'com.sun.star.awt.UnoControlDialog', self.ctx) 
     732        self.container.setModel(self.dialog) 
     733        self.container.getControl('action').addActionListener(self) 
     734        toolkit = smgr.createInstanceWithContext( 
     735            'com.sun.star.awt.ExtToolkit', self.ctx) 
     736        self.container.setVisible(False) 
     737        self.container.createPeer(toolkit, None) 
     738        self.container.execute() 
     739 
     740    def actionPerformed(self, actionEvent): 
     741        try: 
     742            try: 
     743                desktop = self.ctx.ServiceManager.createInstanceWithContext( 
     744                'com.sun.star.frame.Desktop', self.ctx) 
     745                PLUGIN.revise(desktop.getCurrentComponent(), 
     746                                self.get_value(self.revision_entry, None), 
     747                                self.get_value(self.unlock_button, None)) 
     748                self.container.endExecute() 
     749            except ValueError, e: 
     750                print e 
     751        except: 
     752            traceback.print_exc() 
     753 
    723754class OpenPLMLogin(unohelper.Base, XJobExecutor): 
    724755    def __init__(self, ctx): 
     
    799830            traceback.print_exc() 
    800831 
     832class OpenPLMRevise(unohelper.Base, XJobExecutor): 
     833    def __init__(self, ctx): 
     834        self.ctx = ctx 
     835 
     836    def trigger(self, args): 
     837        try: 
     838            desktop = self.ctx.ServiceManager.createInstanceWithContext( 
     839                'com.sun.star.frame.Desktop', self.ctx) 
     840            PLUGIN.set_desktop(desktop) 
     841            gdoc = desktop.getCurrentComponent() 
     842            if gdoc and gdoc.URL in PLUGIN.documents: 
     843                doc = PLUGIN.documents[gdoc.URL]["openplm_doc"] 
     844                doc_file_id = PLUGIN.documents[gdoc.URL]["openplm_file_id"] 
     845                path = PLUGIN.documents[gdoc.URL]["openplm_path"] 
     846                if not doc or not PLUGIN.check_is_locked(doc["id"], doc_file_id): 
     847                    return 
     848                revisable = PLUGIN.get_data("api/object/%s/isrevisable/" % doc["id"])["revisable"] 
     849                if not revisable: 
     850                    show_error("Document can not be revised") 
     851                    return 
     852                res = PLUGIN.get_data("api/object/%s/nextrevision/" % doc["id"]) 
     853                revision = res["revision"] 
     854                name = os.path.basename(path) 
     855                dialog = ReviseDialog(self.ctx, doc, name, revision) 
     856                dialog.run() 
     857                try: 
     858                    gdoc.close(True) 
     859                except CloseVetoException: 
     860                    pass 
     861        except: 
     862            traceback.print_exc() 
    801863g_ImplementationHelper = unohelper.ImplementationHelper() 
    802864 
    803865for cls in (OpenPLMLogin, OpenPLMCheckOut, OpenPLMDownload, OpenPLMForget, 
    804             OpenPLMCheckIn): 
     866            OpenPLMCheckIn, OpenPLMRevise): 
    805867    g_ImplementationHelper.addImplementation(cls, 
    806868                                         'org.example.%s' % cls.__name__, 
Note: See TracChangeset for help on using the changeset viewer.