//*****************************************************************************
// CLASS GeneralPage :: verifyAndSave() - save database info
//*****************************************************************************
IBase :: Boolean GeneralPage :: verifyAndSave( IString& theString,
                                               IString& theEntry,
                                               const IString theName )
{

    /*  verify data for correctness */

    if ((theName.length() == 0) && (employeeId.text().length() == 0 ))
        return true;

    // save person information
    if ((theName.length() == 0 ) && (theName.isAlphanumeric()))
        Key = employeeId.text();
    else
       Key = theName;

    // prime the page from data area
    setEmployeeData();

    //-------------------------------------------------------------------------
    // Save the query
    // The key is either what was passed in or the employee number
    //-------------------------------------------------------------------------
    if (theName.length()>0)
       employeeData.save(theName);
    else
       if ( (!isAquery) &&
            (Key.length()> 0 ))
             employeeData.save(Key);

     return true;
}
/******************************************************************************
* Class AccountPage :: verifyAndSave - Save page information to the database  *
******************************************************************************/
bool AccountPage::verifyAndSave( IString& theString,
                                           IString& theEntry,
                                           const IString saveName )
{
/*-----------------------------------------------------------------------------
| If there is no data or is a query, return.                                  |
-----------------------------------------------------------------------------*/
   if ( ( ! saveName.length() )
        && ( ! Key.length() )
        || isAquery )
      return true;

/*-----------------------------------------------------------------------------
| If able to retrieve the container information,                              |
|  save the information to the database based on the key or query name.       |
-----------------------------------------------------------------------------*/
   if ( setAcctData() )
   {
      if ( ( saveName.length() > 0 ) && ( saveName.isAlphanumeric() ) )
         acctData.save( saveName );
       else
         if ( ( Key.length() > 0 ) && ( Key.isAlphanumeric() ) )
            acctData.save( Key );
   }

   return true;
};
/******************************************************************************
* Class AccountPage :: addAcct - Add the account information to the container *
******************************************************************************/
bool AccountPage::addAcct( IString& user, IString& node )
{
   bool
      rc = true;

/*-----------------------------------------------------------------------------
| Create a container text cursor based on the user ID.                        |
-----------------------------------------------------------------------------*/
   IContainerControl::TextCursor
      txtCur( *pCnr, IString( user ), true, false, true );

/*-----------------------------------------------------------------------------
| Start at the beginning of the cursor.                                       |
| If the cursor contains a duplicate, set the return code to false.           |
-----------------------------------------------------------------------------*/
   for ( txtCur.setToFirst();
         txtCur.isValid();
         txtCur.setToNext() )
   {
      if ( ( (AcctCnrObj*) txtCur.current() )->getNode() == node )
      {
         rc = false;
         break;
      }
   }

/*-----------------------------------------------------------------------------
| If the object doesn't exist,                                                |
|  Add the object to the database.                                            |
|  Create an account container object.                                        |
|  Add the object to the container.                                           |
|  Refresh the container.                                                     |
-----------------------------------------------------------------------------*/
   if ( rc )
   {
      if ( isAquery )
      {
         if ( ! user.length() )
            user = "******";
         if ( ! node.length() )
            node = "*";
      }

      acctData.putItem( user, node, LAcctData::add );
      pAcctCnrObj = new AcctCnrObj( user, node );
      pCnr->addObject( pAcctCnrObj );
      pCnr->refresh();
   }

   return rc;
}
// -------------------------------------------------------------------------
// QueryInfo Class :: inRange() - match check having a range
// -------------------------------------------------------------------------
IBase :: Boolean QueryInfo :: inRange(const IString &c1
                                     ,const IString &c2
                                     ,const IString &range)
{

   if (c2.length() == 0)
      return false;

    IString matchItem, compareItem;

    matchItem   = chopOff(c1);
    compareItem = chopOff(c2);

   if ( (c1.isDigits()) && (c2.isDigits()) ) {
      // compare 2 numbers
      long d1=c1.asInt();
      long d2=c2.asInt();
      return compareIt(d1, d2, range);
   }
   else {
      ADate *date1 = new ADate(c1);
      ADate *date2 = new ADate(c2);
      return compareIt(date1, date2, range);
   } /* endif */

};
Пример #5
0
void setMovieWindowHandle(IWindowHandle movieWindowHandle)
{
  if (movieWindowHandle)
  {
    IString unqualifiedFileName = movieFrame->quickFlick->fileName();
    unsigned long lastDelimiterIndex = unqualifiedFileName.lastIndexOf('\\');
    unqualifiedFileName = unqualifiedFileName.subString(lastDelimiterIndex + 1, unqualifiedFileName.length() - lastDelimiterIndex);
    movieFrame->title.setObjectText("QuickFlick");
    movieFrame->title.setViewText(unqualifiedFileName);
    movieFrame->addToWindowList();

    movieFrame->movieWindow = IWindow::windowWithHandle(movieWindowHandle);
    IDMHandler::enableDropOn(movieFrame->movieWindow);
    movieFrame->movieWindow->setItemProvider(movieFrame);
  }

  if (movieFrame->quickFlick->logoWindowHandle())
  {
    movieFrame->logo = IWindow::windowWithHandle(movieFrame->quickFlick->logoWindowHandle());
    IDMHandler::enableDropOn(movieFrame->logo);
    movieFrame->logo->setItemProvider(movieFrame);
  }

  if (movieWindowHandle && QuickFlick::nonEmbeddedDisplay() == QF_NONEMBED_TOFIT)
    movieFrame->reset();
  else
    movieFrame->showWindow();
}
/******************************************************************************
* class FontSelectHandler::enter - Handle combo box selections
******************************************************************************/
bool FontSelectHandler::enter( IControlEvent& event)
{
  IString fontChoice =  ((IComboBox*)event.controlWindow())->text();
  if(fontChoice.length())
  {
/*----------------------------------------------------------------------------|
| Set the new font                                                            |
-----------------------------------------------------------------------------*/
     editorFrame.editorFont().setName(fontChoice);
     editorFrame.editorWindow().setFont(editorFrame.editorFont());
  }
  return true;
}
Пример #7
0
Boolean QFMotionPlayer::command(ICommandEvent &event)
{
  IString saveAsFileName;
  FOURCC ioProc;

  switch (event.commandId())
  {
    case PLAY_BUTTON_ID:
      handlePlayCommand();
      return true;

    case MI_MOTION_SAVEAS:
      saveAsFileName = qf.showSaveAsDialog(window_p);
      if (saveAsFileName.length())
      {
        if (movieWindow)
          movieWindow->disable();
        if (qf.controller())
          qf.controller()->disableControls();
        if (isPositionTracking)
        {
          isPositionTracking = false;
          moviePlayer->stopPositionTracking();
          moviePlayer->deletePendingEvents(IMMDevice::positionChangeEvent);
        }

        moviePlayer->stop();

        ((IMMDigitalVideo*)moviePlayer)->saveAs(saveAsFileName, IMMDevice::wait);

        autoStartPerformed = false;
        atEnd = true;
        if (qf.controller())
          qf.controller()->setArmPercent(.0);
        prepareThread = new IThread(new IThreadMemberFn<QFMotionPlayer>(*this, QFMotionPlayer::prepare));
      }
      return true;

    default:
      return false;
  }
}
ListBoxItem :: ListBoxItem ( IDMSourceOperation *srcOp,
                             IListBox           *srcLB,
                             unsigned            index )
  : IDMItem( srcOp,
             IDM::text,
             IDMItem:: moveable | IDMItem::copyable,
             none )
  {
  // Item contents is the list box item text.
  this -> setContents( srcLB->itemText( index ) );
  // Item object is the item index.
  this -> setObject( (void*)index );
  // Try to use rfText...
  IString
    name = this -> generateSourceName(),
    rfs   = rfForThisProcess();
  if ( name.length() )
    { // Text fits, use rfText.
    this -> setSourceName( name );
    rfs += IString( "," ) + IDM::rfText;
    }
  else
    { // Text doesn't fit, use rfSharedMem instead.
    rfs += IString( "," ) + IDM::rfSharedMem;
    this -> setRequiresPreparation();
    }
  // Set up RMFs; we support dropping on shredder, too.
  this -> setRMFs( rmfsFrom( IDM::rmLibrary, rfs ) );
  this -> addRMF( IDM::rmDiscard, IDM::rfUnknown );

  // Use text icon when dragged.
  ISystemPointerHandle
    icon( ISystemPointerHandle::text );
  IDMImage
    image( icon );
  this -> setImage( image );
  }  
/******************************************************************************
* Class AccountPage :: command - Catch and process command events.            *
******************************************************************************/
bool AccountPage::command( ICommandEvent& cmdEvent )
{
   IString
      theUser = userId.text(),
      theNode = nodeSys.text();
   LAcctData::Rule
      theRule = LAcctData::na;
   bool
      rc = false;
   unsigned int
      count = 0;

/*-----------------------------------------------------------------------------
| Create a container object cursor based on the selected objects.             |
| Process the command events.                                                 |
-----------------------------------------------------------------------------*/
   IContainerControl::ObjectCursor
      soc( *pCnr, IContainerObject::selected );

   switch ( cmdEvent.commandId() )
   {
/*-----------------------------------------------------------------------------
| User pressed the UNDO button.                                               |
| Reset the account data to the original account data.                        |
| Reset the container.                                                        |
| Reset the entryfields.                                                      |
-----------------------------------------------------------------------------*/
      case ID_BUTTON_UNDO:
      {
         acctData = origAcctData;
         fillCnr();
         userId.setText( "" );
         nodeSys.setText( "" );
         rc = true;
         break;
      }

/*-----------------------------------------------------------------------------
| User pressed the REMOVE button.                                             |
| Iterate through the selected objects,                                       |
|  remove the object from the the database.                                   |
-----------------------------------------------------------------------------*/
      case ID_BUTTON_REMOVE:
      {
         for ( soc.setToFirst();
               soc.isValid();
               soc.setToNext() )
         {
            AcctCnrObj
               *pObj = (AcctCnrObj *) soc.current();
            acctData.putItem( pObj->getUserId(),
                              pObj->getNode(),
                              LAcctData::remove );
            ++count;
         }

/*-----------------------------------------------------------------------------
| If no container objects were selected,                                      |
|  notify the user.                                                           |
-----------------------------------------------------------------------------*/
         if ( ! count )
         {
            IMessageBox
               warning( owner() );
            warning.show( STR_MSG_REMOVE,
                          IMessageBox::enterButton
                          | IMessageBox::informationIcon );
         }
/*-----------------------------------------------------------------------------
| Else remove the selected objects from the container.                        |
| Refresh the container.                                                      |
-----------------------------------------------------------------------------*/
         else
         {
            pCnr->removeSelectedObjects();
            userId.setText( "" );
            nodeSys.setText( "" );
            pCnr->refresh();
         }
         rc = true;
         break;
      }

/*-----------------------------------------------------------------------------
| User pressed the CHANGE button.                                             |
| Ignore all but the first selected container object.                         |
| Update the entryfields with the selected container object information.      |
-----------------------------------------------------------------------------*/
      case ID_BUTTON_CHANGE:
      {
         soc.setToFirst();
         if ( soc.isValid() )
         {
            if ( theUser.length() )
            {
               changeAcct( theUser, theNode, (AcctCnrObj*) soc.current() );
               userId.setText( "" );
               nodeSys.setText( "" );
            }

         }
/*-----------------------------------------------------------------------------
| If no container objects were selected,                                      |
|  notify the user.                                                           |
-----------------------------------------------------------------------------*/
         else
         {
            IMessageBox
               warning( owner() );
            warning.show( STR_MSG_CHANGE,
                          IMessageBox::enterButton
                          | IMessageBox::informationIcon );
         }

/*-----------------------------------------------------------------------------
| Deselect any container objects.                                             |
-----------------------------------------------------------------------------*/
         unMark();
         rc = true;
         break;
      }

/*-----------------------------------------------------------------------------
| User pressed the ADD button.                                                |
| Add the entryfield information to the database and container.               |
| Reset the entryfields.                                                      |
-----------------------------------------------------------------------------*/
      case ID_BUTTON_ADD:
      {
         if ( theUser.length() )
         {
            addAcct( theUser, theNode );
            userId.setText( "" );
            nodeSys.setText( "" );
         }

/*-----------------------------------------------------------------------------
| Deselect any container objects.                                             |
-----------------------------------------------------------------------------*/
         unMark();
         rc = true;
         break;
      }

/*-----------------------------------------------------------------------------
| User pressed the HELP button.                                               |
| Show the help for the account page.                                         |
-----------------------------------------------------------------------------*/
      case ID_BUTTON_HELP:
      {
         IHelpWindow::helpWindow( this )->
            show( IResourceId( ID_ACCOUNT_PAGE ) );
         rc = true;
         break;
      }

   }

   return rc;
};
/*------------------------------------------------------------------------------
| ContainerCutPasteHandler::command                                            |
|                                                                              |
| Handle the command events associated with the clipboard (Cut, Copy,          |
| and Paste).                                                                  |
------------------------------------------------------------------------------*/
bool ContainerCutPasteHandler::command ( ICommandEvent& event)
{
  switch(event.commandId())
  {
    case MI_CUT           :
    case MI_COPY          :
    {

      // Create a clipboard object.
      IClipboard clipboard(event.controlWindow()->handle());


      // Find the cursored object in the container.
      Department* cursoredObject = (Department*)(container().cursoredObject());

      // If a Copy request, utilize delayed rendering to put the data of
      // of the private format on the clipboard. If a Cut request, put
      // the data directly on the clipboard since the object won't be
      // around later when the renderFormat code needs it.
      // We maintain an "objectList" collection to keep track of 
      // the objects copied onto the clipboard so that renderFormat
      // knows which objects to render.
      // We also store text data for the objects so that applications
      // that don't support the private format can paste the data into a
      // text editor.

      // Clear the collection used to keep track of clipboard objects.
      objectList->removeAll();

      // If the cursored object is selected, loop through all other
      // selected objects and store the objects in our set.
      if (container().isSelected(cursoredObject))
      {
        unsigned long count = 0;
        IString objectsAsText("\0");
        IContainerControl::ObjectCursor cursor(container(), IContainerObject::selected);
        for (cursor.setToFirst(); cursor.isValid(); cursor.setToNext())
        {
          count++;
          Department* selectedObject = (Department*)(container().objectAt(cursor));
          objectList->add(selectedObject);
          objectsAsText = objectsAsText +  selectedObject->text();
        }


        // Empty the clipboard to establish ownership
        clipboard.empty();

        // Put the data on the clipboard.  We put our private
        // format first since it has the most information.
        // We use 0 for the data on a Copy request because
        // we want to delay the rendering until
        // the paste operation.
        // If this is a Cut, put the data on the clipboard
        // instead of using delayed rendering because we delete
        // the object.

        if (event.commandId() == MI_CUT)
        {
          IString string = selectedData();
          clipboard.setData(Department::renderedFormat, (const char*)string, string.length()+1);
          objectList->removeAll();
          container().deleteSelectedObjects();
        }
        else
          clipboard.setData(Department::renderedFormat, 0, 0);
        
        clipboard.setText(objectsAsText);
      }
      else
      {
        // If the object is not selected, repeat the above procedure
        // for the cursored object.
        objectList->add(cursoredObject);

        // Empty the clipboard to establish ownership
        clipboard.empty();

        // Put the data on the clipboard (using
        // delayed rendering for a Copy. Delete the object
        // if a Cut request.
        IString objectAsText = cursoredObject->text();
        if (event.commandId() == MI_CUT)
        {
           IString string = selectedData();
           clipboard.setData(Department::renderedFormat, (const char*)string, string.length()+1);
           objectList->removeAll();
           container().removeObject(cursoredObject);
           delete cursoredObject;
        }
        else
          clipboard.setData(Department::renderedFormat, 0,0);

        clipboard.setText(objectAsText);
      }
      return true;
    }
    case MI_PASTE         :
    {
      IClipboard clipboard(event.controlWindow()->handle());

      // If the clipboard has data of the private format,
      // get the data and build objects from it.
      // Note:  To see the text format of the data, paste
      // from the clipboard using any text editor that
      // supports the clipboard.
      if (clipboard.hasData(Department::renderedFormat))
      {
         IString strCount, strObject, objectsAsString;

         // Query the data on the clipboard.
         char* data = (char*)clipboard.data(Department::renderedFormat);

         // Parse the string into our data fields.
         data >> strCount >> separator >> objectsAsString;

         // Extract the number of objects stored in the string.
         unsigned long count = strCount.asUnsigned();

         // Turn refresh off to eliminate multiple painting.
         container().setRefreshOff();

         // Construct new objects from the data.
         for( int i=0; i<count; i++)
         {
           objectsAsString >> strObject >> separator >> objectsAsString;
           Department* department = new Department();
           department->initializeFromString(strObject);
           container().addObject(department);
         }

         // Enable refresh and refresh the container.
         container().setRefreshOn();
         container().refresh();
      }
      return true;
    }
  }
Editor::Editor ()
       :IFrameWindow(ID_MAIN_WINDOW),
        title(this),
        flyText(ID_FLYTEXT, &toolBar),
        infoText(ID_INFOTEXT, this, this),
        flyHelpHandler(&flyText, &infoText, 0, 0),
        editWindow(ID_EDITOR, this, this),
        toolBar(ID_TOOLBAR, this, IToolBar::aboveClient, false,
                IToolBar::classDefaultStyle
                | IToolBar::dragDrop),
        cutButton       (IC_ID_CUT,        &toolBar, &toolBar,
               IRectangle(), IToolBarButton::defaultStyle() |
               IToolBarButton::dragDelete ),
        copyButton      (IC_ID_COPY,       &toolBar, &toolBar,
               IRectangle(), IToolBarButton::defaultStyle() |
               IToolBarButton::dragDelete ),
        pasteButton     (IC_ID_PASTE,      &toolBar, &toolBar,
               IRectangle(), IToolBarButton::defaultStyle() |
               IToolBarButton::dragDelete ),
        boldButton      (IC_ID_BOLD,       &toolBar, &toolBar,
               IRectangle(), IToolBarButton::defaultStyle() |
               IToolBarButton::transparentBitmap ),
        italicButton    (IC_ID_ITALIC,     &toolBar, &toolBar,
               IRectangle(), IToolBarButton::defaultStyle() |
               IToolBarButton::transparentBitmap ),
        underscoreButton(IC_ID_UNDERSCORE, &toolBar, &toolBar,
               IRectangle(), IToolBarButton::defaultStyle() |
               IToolBarButton::transparentBitmap ),
        fontCombo(ID_FONTCOMBO, &toolBar, &toolBar, IRectangle(),
                  IBaseComboBox::classDefaultStyle &
                  ~IBaseComboBox::simpleType |
                  IBaseComboBox::readOnlyDropDownType),
        menu(ID_MAIN_WINDOW,this),
        fontSelectHandler(*this),
        editFont(),
        commandhandler(&editFont, &toolBar, &editWindow, &menu)
{
/*----------------------------------------------------------------------------|
| Set the icon and title text                                                 |
-----------------------------------------------------------------------------*/
   setIcon( id() );
   title.setTitleText(ID_MAIN_WINDOW);



/*----------------------------------------------------------------------------|
| Add the buttons to the toolbar                                              |
-----------------------------------------------------------------------------*/
   toolBar.addAsLast(&cutButton,true);
   toolBar.addAsLast(&copyButton);
   toolBar.addAsLast(&pasteButton);
   toolBar.addAsLast(&boldButton,true);
   toolBar.addAsLast(&italicButton);
   toolBar.addAsLast(&underscoreButton);
   toolBar.addAsLast(&fontCombo,true);

/*----------------------------------------------------------------------------|
| Set up latchable style for font property buttons                            |
| Note: When in bitmapAndTextView, latching a toolbar button will show the    |
| gray background for the bitmap.  To eliminate the gray background, set      |
| the transparent color to gray and turn on the transparent style for the     |
| button.  If you do not use the bitmapAndTextView and you have many buttons  |
| with the latchable style, consider not enabling the transparent style as    |
| transparency incurs additional overhead and increases performance time.     |
-----------------------------------------------------------------------------*/
   boldButton.enableLatching();
   italicButton.enableLatching();
   underscoreButton.enableLatching();

   boldButton.setTransparentColor(IColor::kPaleGray);
   italicButton.setTransparentColor(IColor::kPaleGray);
   underscoreButton.setTransparentColor(IColor::kPaleGray);

/*----------------------------------------------------------------------------|
| Load up font combo box with face names                                      |
-----------------------------------------------------------------------------*/
   fontCombo.setLimit(10);
#ifndef IC_MOTIF
   IFont::FaceNameCursor fontCursor;
   for ( fontCursor.setToFirst(); fontCursor.isValid(); fontCursor.setToNext())
   {
     IString faceName = IFont::faceNameAt(fontCursor);
     fontCombo.addAsLast(faceName);
     if (faceName.length() > fontCombo.limit())
       fontCombo.setLimit(faceName.length());
   }
#endif

/*----------------------------------------------------------------------------|
| Set up title for toolbar when floating                                      |
-----------------------------------------------------------------------------*/
   toolBar.setFloatingTitle(STR_TOOLBAR);

/*----------------------------------------------------------------------------|
| Setup the editor                                                            |
-----------------------------------------------------------------------------*/
   setClient(&editWindow);
   editWindow.setFont(editFont);
   try
   {
     editWindow.importFromFile("toolbar.not");
   }
   catch( ... )
   {
      IMessageBox
         msgBox( this );
      msgBox.setTitle( STR_MSGBOX_TITLE );
      msgBox.show( STR_FILE_NOT_FOUND,
                   IMessageBox::okButton |
                   IMessageBox::warningIcon);
   }
   editWindow.setTop(1);

/*----------------------------------------------------------------------------|
| Add the info frame extension                                                |
-----------------------------------------------------------------------------*/
   addExtension(&infoText, IFrameWindow::belowClient);

/*----------------------------------------------------------------------------|
| Set up and add the help handler                                             |
-----------------------------------------------------------------------------*/
   flyHelpHandler.setLongStringTableOffset(OFFSET_INFOTEXT);
   flyHelpHandler.handleEventsFor(&toolBar);

/*----------------------------------------------------------------------------|
| For Motif, disable the Floating menuitem.                                   |
-----------------------------------------------------------------------------*/
#ifdef IC_MOTIF
                                            // On Motif, changing a toolbar location
                                            // to floating is not allowed.  Only
                                            // the initial location can be set
                                            // to floating.  Therefore, disable
                                            // the menuitem on Motif since it
                                            // would have no effect.
  menu.enableItem( ID_TOOLBAR_FLOATING, false );
#endif

/*----------------------------------------------------------------------------|
| Attach the Command Handler to the frame                                     |
-----------------------------------------------------------------------------*/
   commandhandler.handleEventsFor(this);

/*----------------------------------------------------------------------------|
| Allow the font select handler to handle events for font combo box.          |
-----------------------------------------------------------------------------*/
   fontSelectHandler.handleEventsFor(&fontCombo);

   moveSizeToClient(IRectangle(IPoint(100,100),
                               ISize(editFont.avgCharWidth()*80,
                                     editFont.maxCharHeight()*15)));
}
Пример #12
0
void IString::change(IString a, IString b, int i){
	int start = this->find(a);
	if(start != -1)
		this->replace(start, a.length(), b);
}