Re: FXTable::fitColumnsToContents

View: New views
4 Messages — Rating Filter:   Alert me  

Parent Message unknown Re: FXTable::fitColumnsToContents

by Lyle Johnson-4 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message


On May 17, 2008, at 6:54 AM, David Toll wrote:

> I tried to submit the following message to the "fxruby-users"  
> message board (I clicked the link to send it as an email to fxruby-users@...
> , but the message did not appear).  I conclude I do not know how to  
> submit questions to this message board.

You need to be subscribed to the mailing list before you can send  
questions to it. Are you subscribed? If not, fill out the subscription  
form here:

        http://rubyforge.org/mailman/listinfo/fxruby-users

Note that you need to send messages from the same address that you're  
subscribed under. So if you're subscribed as "tolld@..." (for  
example), you wouldn't be able to send messages from "tolld@...
").

> In a table column with a header, when I use "fitColumnsToContents",  
> if the header is wider than any of the cells in the column then the  
> header is truncated.  It would appear that the contents of the  
> header are ignored when determining the column width from the column  
> contents.

I took a quick look at the FOX source code and it looks like you're  
right. Only the cells in the body of the table are considered.

> A work-around is to pad the column data with spaces.  However, is  
> there a better way of doing this?

This seems to work; see what you think:

        class FXTable
          def fitColumnsToContents(col, nc)
            col.upto(col+nc-1) do |c|
              cw = getMinColumnWidth(c)
              hw = columnHeader.font.getTextWidth(columnHeader.getItemText(c))
              setColumnWidth(c, [cw, hw].max)
            end
          end
        end

Note that this is similar to the original implementation of  
fitColumnsToContents() from FOX; but it also checks the width of the  
column header items to see if they're wider.

> I have another question:
>
> Many FXRuby objects have a "height" parameter.  However, it seems to  
> be ignored in at least some cases.  For example, if you create an  
> FXText object without "LAYOUT_FILL" or "LAYOUT_FILL_Y" then the text  
> window is something like 3 lines high.  If I add a height parameter,  
> the object height does not change.

True. For those cases you'd need to specify the LAYOUT_FIX_HEIGHT  
layout width to get it to enforce your specified height value.

> A corollary to this is - what are the units for "height" (pixels,  
> lines, inches, ....)? - I have not found this in the API  
> documentation.

Width and height are always in pixels.

> I have a table with column headers.  I changed the header font from  
> the default (Tahoma at about 8 or 9 point) to Tahoma Bold at 10  
> points.  The font changes OK; however, the height of the header is  
> not changed to allow more space for the font - in my case,  
> descenders (such as the bottom of a "y") are chopped off.
>
> How do I get round this?  My reading of the documentation is that it  
> should automatically increase the size of the header to fit the  
> contents unless you tell it the height is fixed (which is not the  
> case here).

When the table constructs its header, it's passing in the  
LAYOUT_FIX_HEIGHT option. So it's not you that's telling it to use a  
fixed height, but that is in fact what it's doing. To work around  
this, just reset the layout hints for that widget:

        table.columnHeader.layoutHints = 0

> Many thanks for you help.  I suspect many of my problems are because  
> I am a novice at FXRuby.

No, they're good questions and things that aren't obvious from the  
documentation. I always learn something when I have to dig in and  
figure out these problems. ;)

Hope this helps,

Lyle

---
"FXRuby: Create Lean and Mean GUIs with Ruby"
Now available from the Pragmatic Bookshelf!
http://www.pragprog.com/titles/fxruby





_______________________________________________
fxruby-users mailing list
fxruby-users@...
http://rubyforge.org/mailman/listinfo/fxruby-users

Intercepting and reviewing FXText messages, especially KEY_PRESS|SEL_INSERTED

by Jason Martin-11 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hi All,

I am new to the list, and FXRuby, this being my first post. I have hit a
little snag, I am futzing around with a texteditor and everything works
fine, but I would like to add in a snippet like functionality, but I
seem to be at a loss for how to do it.

How I imagine it would be done is.

I have created a Dispatcher class, this class handles most messages in
the program, adding a new tab/editor, displaying x or why. What I would
like to do is have my Dispatcher class intercept messages
to and from the FXText, and then perform some actions on the FXText. If
someone presses the TAB key, I would want to intercept that, grab the
text before the cursor, see if a snippet has been defined, if
so, add the text in, otherwise, send the TAB key to the FXText like
normal and let it do it's thing.

Some code:

#dispatcher.rb
class Dispatcher
  def initialize(owner,sender,sel,event)
    puts "Dispatcher Called with: #{owner}, #{sender}, #{sel}, #{event}"
  end
end

#content_pane.rb
...
def add_buffer(name)
    FXHorizontalFrame.new(@tab_book,
FRAME_THICK|FRAME_RAISED|LAYOUT_FILL_X|LAYOUT_FILL_Y) do |frame|
      @buffers << FXText.new(frame,:opts => TEXT_WORDWRAP|LAYOUT_FILL)
      @current_buffer = @buffers.last
      @current_buffer.setFocus
    end
end
...

Essentially, what I imagine is this:

#content_pane.rb
def add_buffer(name)
    ...
      #pseudo Code
        @buffers.last.connect(message) do |sender,sel,event|
          Dispatcher.new(self,sender,sel,event)
        end
      #end pseudo code
      ...
end
#dispatcher.rb
...
#pseudo code
  def handle_text_widget_message(sender,sel,event)
      if event.code == code_i_want then
          #do something here
      else
         send_message_to(sender,sel,event)
      end
  end
#end pseudocode
...

I may be completely off my rocker and doing things retarded, as I am
mainly a webprogrammer, and very new to GUI programming and how it
works, so if there is a better, or more standard way of doing it, please
point it out to me, or reference documents that might help, anything
will be greatly appreciated. While writing this, I realize that I can
use SEL_KEYRELEASE and get the info I want, however, I would like to get
it before insertion,a nd not have to handle determining key behavior for
the widget, like backspace, and insert etc.

Many thanks in advance,
Jason

_______________________________________________
fxruby-users mailing list
fxruby-users@...
http://rubyforge.org/mailman/listinfo/fxruby-users

Re: Intercepting and reviewing FXText messages, especially KEY_PRESS|SEL_INSERTED

by Lyle Johnson-4 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

On Mon, May 19, 2008 at 4:55 AM, Jason Martin <jason@...> wrote:

> I may be completely off my rocker and doing things retarded, as I am mainly
> a webprogrammer, and very new to GUI programming and how it works, so if
> there is a better, or more standard way of doing it, please point it out to
> me, or reference documents that might help, anything will be greatly
> appreciated. While writing this, I realize that I can use SEL_KEYRELEASE and
> get the info I want, however, I would like to get it before insertion,a nd
> not have to handle determining key behavior for the widget, like backspace,
> and insert etc.

Well, if you catch the SEL_KEYPRESS message (instead of
SEL_KEYRELEASE) you can interecept the Tab key press before any text
gets inserted, right? And if you determine that there is some
"snippet" text before the current cursor position, you would (I guess)
insert the expanded text and then return true to indicate that your
message handler handled the event and FXText's regular SEL_KEYPRESS
handler doesn't need to do anything else with it. If you instead
determine that there is no "snippet" text to try to expand, you'd want
to return false from the message handler so that the default
SEL_KEYPRESS processing kicks in.

Hope this helps,

Lyle
>
> Many thanks in advance,
> Jason
>
> _______________________________________________
> fxruby-users mailing list
> fxruby-users@...
> http://rubyforge.org/mailman/listinfo/fxruby-users
>
_______________________________________________
fxruby-users mailing list
fxruby-users@...
http://rubyforge.org/mailman/listinfo/fxruby-users

Re: Intercepting and reviewing FXText messages, especially KEY_PRESS|SEL_INSERTED

by Jason Martin-11 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Lyle Johnson wrote:

Well, if you catch the SEL_KEYPRESS message (instead of
SEL_KEYRELEASE) you can interecept the Tab key press before any text
gets inserted, right? And if you determine that there is some
"snippet" text before the current cursor position, you would (I guess)
insert the expanded text and then return true to indicate that your
message handler handled the event and FXText's regular SEL_KEYPRESS
handler doesn't need to do anything else with it. If you instead
determine that there is no "snippet" text to try to expand, you'd want
to return false from the message handler so that the default
SEL_KEYPRESS processing kicks in.

Hope this helps,

Lyle
  
Hi Lyle,

Thanks, that was the piece of info I was looking for, I am sure it's written somewhere, but I missed it. I didn't know that returning false would cause the keypress/message to be sent on. I guess I thought it kinda died there on the operating table...

/jason

_______________________________________________
fxruby-users mailing list
fxruby-users@...
http://rubyforge.org/mailman/listinfo/fxruby-users